2

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

1 回答 1

3

尝试

@Html.EditorFor(x => x.Emails, "string", "EmailAddress") //or EmailAdress

MSDN参考有以下,你有兴趣的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"

当然,您可以编写自己的助手,在您使用它的任何地方执行此操作。

于 2012-12-21T15:28:42.937 回答