You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core中input标签助手自动添加__Invariant隐藏元素致Bootstrap样式异常

问题:Bootstrap 5输入组因自动生成的__Invariant隐藏元素样式错乱

我碰到了一个不好排查的问题,先看我的标记代码:

<div class="col-md-4">
    <div class="mb-3">
        <label asp-for="OrderSearch.StartDate" class="control-label"></label>
        <div class="input-group">
            <button type="button" class="btn btn-outline-primary dropdown-toggle" data-bs-toggle="dropdown" title="Predefined Dates">
                <img src="~/images/mdi/calendar.svg" />
            </button>
            <ul class="dropdown-menu">
                <li><a data-mode="1" href="javascript:void(0)" class="set-dates dropdown-item">Today</a></li>
                <li><a data-mode="2" href="javascript:void(0)" class="set-dates dropdown-item">Yesterday</a></li>
                <li><a data-mode="3" href="javascript:void(0)" class="set-dates dropdown-item">This Week</a></li>
                <li><a data-mode="4" href="javascript:void(0)" class="set-dates dropdown-item">This Month</a></li>
                <li><a data-mode="5" href="javascript:void(0)" class="set-dates dropdown-item">This Quarter</a></li>
                <li><a data-mode="6" href="javascript:void(0)" class="set-dates dropdown-item">This Year</a></li>
                <li><a data-mode="7" href="javascript:void(0)" class="set-dates dropdown-item">Last Week</a></li>
                <li><a data-mode="8" href="javascript:void(0)" class="set-dates dropdown-item">Last Month</a></li>
                <li><a data-mode="9" href="javascript:void(0)" class="set-dates dropdown-item">Last Quarter</a></li>
                <li><a data-mode="10" href="javascript:void(0)" class="set-dates dropdown-item">Last Year</a></li>
            </ul>
            <input asp-for="OrderSearch.StartDate" class="form-control" />
        </div>
        <span asp-validation-for="OrderSearch.StartDate" class="text-danger"></span>
    </div>
</div>

下面是这段标记渲染后的结果,注意多了一个名为__Invariant的隐藏元素:

<div class="col-md-4">
    <div class="mb-3">
        <label class="control-label" for="OrderSearch_StartDate">Start Date (Order Closed)</label>
        <div class="input-group">
            <button type="button" class="btn btn-outline-primary dropdown-toggle" data-bs-toggle="dropdown" title="Predefined Dates">
                <img src="/images/mdi/calendar.svg" />
            </button>
            <ul class="dropdown-menu">
                <li><a data-mode="1" href="javascript:void(0)" class="set-dates dropdown-item">Today</a></li>
                <li><a data-mode="2" href="javascript:void(0)" class="set-dates dropdown-item">Yesterday</a></li>
                <li><a data-mode="3" href="javascript:void(0)" class="set-dates dropdown-item">This Week</a></li>
                <li><a data-mode="4" href="javascript:void(0)" class="set-dates dropdown-item">This Month</a></li>
                <li><a data-mode="5" href="javascript:void(0)" class="set-dates dropdown-item">This Quarter</a></li>
                <li><a data-mode="6" href="javascript:void(0)" class="set-dates dropdown-item">This Year</a></li>
                <li><a data-mode="7" href="javascript:void(0)" class="set-dates dropdown-item">Last Week</a></li>
                <li><a data-mode="8" href="javascript:void(0)" class="set-dates dropdown-item">Last Month</a></li>
                <li><a data-mode="9" href="javascript:void(0)" class="set-dates dropdown-item">Last Quarter</a></li>
                <li><a data-mode="10" href="javascript:void(0)" class="set-dates dropdown-item">Last Year</a></li>
            </ul>
            <input type="date" class="form-control" id="OrderSearch_StartDate" name="OrderSearch.StartDate" value="" />
            <input name="__Invariant" type="hidden" value="OrderSearch.StartDate" />
        </div>
        <span class="text-danger field-validation-valid" data-valmsg-for="OrderSearch.StartDate" data-valmsg-replace="true"></span>
    </div>
</div>

我用的是Bootstrap 5,现在因为<input>不再是<input-group>容器里的最后一个元素,导致输入组的样式乱了,不确定这个问题是不是和Bootstrap有关。我搜了很多资料都没找到解决方案,有没有人碰到过这个问题?

更新:
这个问题似乎和<input>标签助手有关。如果我把StartDate控件的type显式设为text或datetime,就不会生成这个隐藏元素,但我需要它是date类型。目前我的属性定义如下:

[Display(Name = "Start Date (Order Closed)")]
[DataType(DataType.Date)]
public DateTime? StartDate { get; set; }

内容的提问来源于stack exchange,提问作者Jonathan Wood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:24:58