2

我在我的代碼中使用編輯器模板,我注意到很多控件獲取基於索引的名稱屬性集。ASP.NET MVC3 EditorTemplates和名稱屬性

@Html.EditorFor(x => x.Emails) 

如果答案是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"> 

我試圖設置name屬性是這樣的:

@Html.TextBoxFor(x => x.EmailId, new { @name = "EmailAdress" }) 

但這沒有效果!

我需要做什麼,它需要名稱值有效。這樣做的主要原因是用於驗證目的。在我的驗證規則,我有以下幾點:

$("#someForm").validate({ 
     rules: { 
      EmailAddress: { 
       required: true, 
       email: true 
      } 
     } 
    }); 
+0

x.Emails列表或數組?你不應該使用EditorFor()到對象列表,除非你創建你自己的Editor模板,對列表對象進行正確的處理。 – renanlf

+0

它以這種方式命名它們,以便模型聯編程序可以正確地綁定到一個集合。如果你改變這個,你將不得不做一些額外的工作,以確保在發佈表單時所有東西都能正確綁定。 – Dismissile

回答

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" 

當然,你可以寫你自己的助手,無論你用它做這個工作中編輯,你可以設置這個前綴。

+0

仍然增加了這個:[0] .EmailAddress作爲名字 – jmogera

+0

更新的答案與一個前綴建議 – dove

+0

這將在控制器中去哪裏? – jmogera