我在我的代码中使用编辑器模板,我注意到很多控件都是根据索引获取name属性。
@Html.EditorFor(x => x.Emails)
其中Answers是EmailViewModel对象的集合
为每个项目呈现的内容是:
<input data-val="true" data-val-number="The field must be a number."
data-val-required="The Email field is required."
id="Emails_0__EmailId" name="Emails[0].EmailId" value="1">
我尝试像这样设置名称属性:
@Html.TextBoxFor(x => x.EmailId, new { @name = "EmailAdress" })
但这没效果!
我需要做什么才能使名称值生效。这样做的主要原因是为了验证目的。在我的验证规则中,我有以下内容:
$("#someForm").validate({
rules: {
EmailAddress: {
required: true,
email: true
}
}
});
答案 0 :(得分:3)
尝试
@Html.EditorFor(x => x.Emails, "string", "EmailAddress") //or EmailAdress
MSDN reference有以下内容,您对htmlFieldName
public static MvcHtmlString EditorFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string templateName,
string htmlFieldName
)
一个字符串,用于消除为具有相同名称的属性呈现的HTML输入元素的名称的歧义。
要编辑前缀,您可以在控制器中设置此前缀
ViewData.TemplateInfo.HtmlFieldPrefix
或在您看来
@Html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "Foo"
当然,您可以编写自己的帮助程序,无论您在何处使用它都可以执行此操作。