ASP.NET MVC 3:使用TextBoxFor覆盖“name”属性

时间:2011-05-19 11:23:48

标签: c# asp.net-mvc-3 razor html-helper

使用Html.TextBoxFor覆盖名称属性是否可行?

我尝试过没有成功。我需要使用TextBoxFor来使客户端验证工作,但是由于我不会进入的原因,我需要文本框的名称与生成的文本框的名称不同。

我尝试了以下内容:

@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })

哪个适用于ID但不适用于名称。这可能吗?

更新:查看TextBoxFor的代码。它看起来并不简单。希望有人可以证明我错了。

11 个答案:

答案 0 :(得分:212)

罗布,实际上有一种更简单的方法。使用 名称 代替名称

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })

答案 1 :(得分:40)

你问这个是因为你想在名字上加一个前缀吗?如果是这样,您可以通过在控制器中设置ViewData.TemplateInfo.HtmlFieldPrefix来执行此操作。

我从Brad Wilson's blog学到了很多关于这些东西的知识。

答案 2 :(得分:13)

EditorFor有一个重载,您可以在其中提供name属性作为参数:

 @Html.EditorFor(expression, null, name)

答案 3 :(得分:8)

试试EditorFor。如果要确保即使属性类型不是字符串也要呈现文本框,也可以将字符串作为模板名称传递。如果property已经是字符串,则显式不需要templatename来呈现文本框,因此您可以传递null。请注意,它不需要显式的id参数,它将从元素名称推断它。使用EditorFor

,所有验证功能仍然有效
 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")

答案 4 :(得分:7)

ben的回答让我得到了我想要的东西,除非你需要用Html.Raw包装

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))

答案 5 :(得分:3)

有点“不好”=),试试:

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")

答案 6 :(得分:3)

致电Microsoft GOTCHA

使用大写字母中的名称,例如

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})

答案 7 :(得分:1)

对我来说,它有效!我希望有所帮助!

@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })

答案 8 :(得分:1)

@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })

不确定中间的那两个字符串参数中的哪一个可以正常工作,但只有在我输入两个参数时才有效。

答案 9 :(得分:0)

对于此示例,我基于权限禁用表单字段,但仍显示它们。我有一个隐藏字段将值发送到控制器,但在EditorFor中需要一个不同的字段名称。 模型值后面的第一个参数表示“名称”属性,第二个是新名称。

@Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} });

结果:

<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" /> 

答案 10 :(得分:0)

保持简单,如果您已经提供了ID,则应该只能够使用方法“ TextBox”而不是“ TextBoxFor”,它将在客户端和服务器端正常工作。此外,尽管可以接受答案,但如果使用浏览器进行检查,则会在标签上产生重复的Name属性。以下解决方案不存在该问题。

MvcHtmlString Html.TextBox(字符串名称,字符串值,对象htmlAttributes)

@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }