是否可以使用Razor通过数据注释指定名称/ id字段?
我有两个部分视图(创建/编辑)出现在同一页面中,每个视图都有一个单独的视图模型,但具有相同的属性名称。
[Display(Prompt = "Live", Name = "Live")]
public bool Live { get; set; }
我尝试使用标签呈现一个复选框:
<div class="editor-field">
@Html.CheckBoxFor(model => model.Live})
@Html.LabelFor(model=>model.Live, new {@class="checkbox-label" })
@Html.ValidationMessageFor(model => model.Live)
</div>
也会渲染:
<div class="editor-field">
<input data-val="true" data-val-required="The Live field is required." id="Live" name="Live" type="checkbox" value="true"><input name="Live" type="hidden" value="false">
<label class="checkbox-label" for="Live">Live</label>
<span class="field-validation-valid" data-valmsg-for="Live" data-valmsg-replace="true"></span>
上面的代码对于创建局部视图重复一次,对编辑局部视图重复一次。
用户点击按钮可以在不重新加载页面的情况下进入视图。
但是,一旦渲染了第一个局部视图,第二个标签就不起作用了 - 因为浏览器已经为第一个复选框分配了一个ID,并且标签不再指向它。
理想情况下,我希望能够注释视图模型,以便呈现的HTML将使用指定的id / name。
[Display(Prompt = "Live", Name = "Live", id="createLive")]
public bool Live { get; set; }
[Display(Prompt = "Live", Name = "Live", id="editLive")]
public bool Live { get; set; }
然后这些新的id将被labelfor自动选中,而validationmessagefor
这样的事情可能吗?
重命名每个视图模型的属性是一个选项...但它打破了我在服务器端工作的一些自动映射/ IMO会不那么整洁。