我有一个问题,基本上我有一个包含很多字段的表单,并且所有字段都有一个必需的属性集,所以当您将其留空并单击“确定”时,您将获得客户端验证并变为红色。它适用于除 EditorTemplate 之外的所有内容。
我的模型如下:
public class MyModel
{
[Required]
public string Username{get;set;}
public Location Loc{get;set;}
}
public class Location
{
[Required]
public string Loc1{get;set;}
[Required]
public string Loc2{get;set;}
}
我的主要观点如下:
@Html.EditorFor(m => m.Location, Model.Location)
这是我的编辑器模板:
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.Loc1)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.Loc1, Model.Locs==null?Enumerable.Empty<SelectListItem>():Model.Locs, "---select--", new { @class = "location-ddl" })
</td>
<td>
@Html.ValidationMessageFor(m => m.Loc1)
</td>
</tr>
...
经过仔细调查后,我注意到它产生的 HTML 如下:
<select name="Location.Loc1" id="Location_Loc1">
如您所见,它缺少一些用于客户端验证的属性,通常应该是这样的:
<select name="Loc1" id="Loc1" data-val-required="The Loc1field is required." data-val="true">
我的问题是,为什么编辑器模板没有通过客户端验证生成正确的 html 输出,以及如何修复它?
只是为了说明它确实在服务器端工作,因此如果这些选择在服务器端为空,它将被标记为未填写并发回。但是,我仍然想了解编辑器的行为以及修复它的方法。
谢谢