使用Html.TextBoxFor
覆盖名称属性是否可行?
我尝试过没有成功。我需要使用TextBoxFor来使客户端验证工作,但是由于我不会进入的原因,我需要文本框的名称与生成的文本框的名称不同。
我尝试了以下内容:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
哪个适用于ID但不适用于名称。这可能吗?
更新:查看TextBoxFor的代码。它看起来并不简单。希望有人可以证明我错了。
答案 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" }