在MVC3中的TextBoxFor中控制名称

iCo*_*ode 7 asp.net-mvc-3

使用TextBoxFor时是否可以控制文本boxt的name属性?

视图中的此代码

@Html.TextBoxFor(m => m.SearchParams.someParam)
Run Code Online (Sandbox Code Playgroud)

产生这个

<input id="SearchParams_someParam" name="SearchParams.someParam" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

但我不希望我的输入名称是"SearchParams.someParam",我希望它是类似的

<input id="SearchParams_someParam" name="MyPreferedName" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

其中MyPreferedName来自相应模型中的.SearchParams.someParam的某些属性.

这可能吗?我知道@ Html.TextBox可以做到,但我不想在视图中对该名称进行硬编码.

u_1*_*148 21

@Html.TextBoxFor(model => model.attr, new { Name = "txt1" })
Run Code Online (Sandbox Code Playgroud)

只需使用"名称"而不是"名称"

  • 不幸的是,在 ASP.NET 5 中,这呈现为 `&lt;input type="text" name="attr" Name="txt1" /&gt;`。 (2认同)

Jes*_*ebb 5

它好像该TextBoxFor方法将不会允许您使用的@name密钥作为htmlAttribute。这有点道理,因为如果它确实允许您覆盖 HTML 名称属性,则该值将不会在表单 POST 中正确绑定到您的模型。

而不是使用...

@Html.TextBoxFor(x => Model.MyProperty, new { @name = "desired_name" }); // does not work
Run Code Online (Sandbox Code Playgroud)

我最终不得不使用...

@Html.TextBox("desired_name", Model.MyProperty); // works
Run Code Online (Sandbox Code Playgroud)

我不确定为什么第一个选项不起作用,但希望这有助于解决它。


Ped*_*C88 -1

这行不通吗? @Html.TextBoxFor(m => m.SearchParams.someParam, new { id="my_id" })尽管对于您的具体情况,它更像是:

@Html.TextBoxFor(m => m.SearchParams.someParam, new { name = "MyPreferedName" })

在这里,您会发现InputExtensions.TextBoxFor的构造函数的不同重载MVC3