ASP.NET MVC3 EditorTemplates和Name Attributes

时间:2012-12-21 15:15:50

标签: asp.net-mvc asp.net-mvc-3 razor jquery-validate mvc-editor-templates

我在我的代码中使用编辑器模板,我注意到很多控件都是根据索引获取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
            }
        }
    });

1 个答案:

答案 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"

当然,您可以编写自己的帮助程序,无论您在何处使用它都可以执行此操作。