Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 按注释指定ID/名称_Asp.net Mvc_Razor_Data Annotations_Meta Tags - Fatal编程技术网

Asp.net mvc 按注释指定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

是否可以使用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>
然后这些新的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; }