Asp.net mvc 按注释指定ID/名称
是否可以使用Razor通过数据注释指定名称/id字段 我有两个局部视图(创建/编辑)出现在同一页面中,每个视图都有一个单独的视图模型,但属性名称相同Asp.net mvc 按注释指定ID/名称,asp.net-mvc,razor,data-annotations,meta-tags,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.Liv
[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>
然后这些新的id会被labelfor和validationmessagefor自动获取
这样的事情可能吗
重命名每个视图模型的属性是一个选项。。。但是它破坏了我在服务器端工作的一些自动映射/在我看来不太整洁。如果两个视图模型相同,为什么会有两个不同的视图模型?(并且生成的html仍然无效)。html帮助程序根据属性名生成
id
属性,因此除非您手动将id
属性添加到复选框-new{id=“createLive”}
-并使用@html.Label(“createLive”,“Live”)
-即伪造它-否则我不可能知道它正在创建无效的html。。。这就是问题的重点。虽然视图模型目前是相同的,但从概念上讲,它们将来可能不相同(例如,如果我将一个属性的名称更改为liveCreate,另一个属性的名称更改为liveEdit。您要求为糟糕的设计提供解决方案。在此处重新访问设计将是最好的解决方案。为什么它是糟糕的设计?如果您将子对象传递给partial,这只是一个问题。传递模型,以便名称
和id
属性但是以属性名称作为前缀。
<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>
[Display(Prompt = "Live", Name = "Live", id="createLive")]
public bool Live { get; set; }
[Display(Prompt = "Live", Name = "Live", id="editLive")]
public bool Live { get; set; }