通过注释Razor指定ID /名称

时间:2015-02-25 10:37:24

标签: asp.net-mvc razor data-annotations meta-tags

是否可以使用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会不那么整洁。

0 个答案:

没有答案