在MVC3中的TextBoxFor中控制名称

时间:2011-08-03 02:14:13

标签: asp.net-mvc-3

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

视图中的此代码

@Html.TextBoxFor(m => m.SearchParams.someParam)

制作本

<input id="SearchParams_someParam" name="SearchParams.someParam" type="text" value="">

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

<input id="SearchParams_someParam" name="MyPreferedName" type="text" value="">

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

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

5 个答案:

答案 0 :(得分:21)

@Html.TextBoxFor(model => model.attr, new { Name = "txt1" })

只需使用“名称”代替“名称”

答案 1 :(得分:4)

似乎<{1}}方法将允许您将TextBoxFor密钥用作htmlAttribute。这有点意义,因为如果它确实允许您覆盖HTML名称属性,则该值不会在POST表单中正确绑定到您的模型。

而不是使用......

@name

我最终不得不使用......

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

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

答案 2 :(得分:1)

使用TextBox而不是TextBoxFor

@Html.TextBox("MyPreferedName", Model.SearchParams.someParam)

答案 3 :(得分:0)

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

  

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

在这里,您将找到MVC3

InputExtensions.TextBoxFor的构造函数的不同重载

答案 4 :(得分:0)

TextBoxFor不允许设置name属性。解决方法:

@Html.EditorFor(m => m.UserName, null, "user_name")

输出:

<input class="text-box single-line" id="user_name" name="user_name" type="text" value="" />