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
相关产品推荐
相关产品推荐

