ASP.NET MVC 2点替换为元素名称中的下划线

Fen*_*ton 3 asp.net-mvc binding

ASP.NET MVC 2点替换为元素名称中的下划线(即使ASP.NET MVC默认情况下会在名称属性中放入点!)

当您在ASP.NET MVC中的表单上粘贴元素时,它通常执行以下操作:

<%= Html.TextBoxFor(model => model.Contact.FirstName)%>
Run Code Online (Sandbox Code Playgroud)

<input type="text" name="Contact.FirstName" id="Contact_FirstName" ...
Run Code Online (Sandbox Code Playgroud)

这一切都很好.但是,如果您想要这样做:

<%= Html.DropDownList(
    "Contact_Title",
    new SelectList(Model.Titles, "Key", "Value"))%>
Run Code Online (Sandbox Code Playgroud)

你实际上最终得到了

<select id="Contact_Title" name="Contact_Title">...
Run Code Online (Sandbox Code Playgroud)

请注意,您现在在name属性中有一个下划线而不是一个点.

所以我以为我会传递这个名字,包括一个点,就像这样:

<%= Html.DropDownList(
    "Contact_Title", 
    new SelectList(Model.Titles, "Key", "Value"),
    new { name = "Contact\\.Title" })%>
Run Code Online (Sandbox Code Playgroud)

但它仍然呈现为:

<select id="Contact_Title" name="Contact_Title">...
Run Code Online (Sandbox Code Playgroud)

我真的(真的)希望这个呈现为:

<select id="Contact_Title" name="Contact.Title">...
Run Code Online (Sandbox Code Playgroud)

为了让它自动绑定回Model.Contact.Title - 任何想法?

重要更新

这与我最初的想法略有不同......它实际上看起来像我传递的任何东西,因为名字属性被简单地忽略了......

new { name = "MYNAME" }
Run Code Online (Sandbox Code Playgroud)

仍然是Contact_Title的结果!

任何帮助赞赏!

Mat*_*son 6

<%= Html.DropDownList(
    "Contact.Title",
    new SelectList(Model.Titles, "Key", "Value"))%>
Run Code Online (Sandbox Code Playgroud)

这将呈现:

<select id="Contact_Title" name="Contact.Title">...
Run Code Online (Sandbox Code Playgroud)

它只替换id中的点,因为它在xhtml中无效.