使用 Html.TextBoxFor
覆盖 name 属性时是否可以?
我尝试过但没有成功。我需要使用 TextBoxFor 来使客户端验证正常工作,但是由于我不会进入的原因,我需要文本框的名称与生成的文本框不同。
我尝试了以下方法:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
它适用于 ID 但不适用于名称。这可能吗?
更新:查看 TextBoxFor 的代码。看起来没有一个简单的方法。希望有人能证明我是错的。
Rob,实际上有一种更简单的方法。使用名称代替名称:
@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
你问这个是因为你想对名称应用前缀吗?如果是这样,您可以通过在控制器中设置ViewData.TemplateInfo.HtmlFieldPrefix
来执行此操作。
我从布拉德·威尔逊的博客中学到了很多关于这些东西的知识。
EditorFor 有一个重载,您可以在其中提供 name
属性作为参数:
@Html.EditorFor(expression, null, name)
被称为Microsoft陷阱...
使用大写字母的名称,如下所示
@Html.TextBoxFor(m => m.Reply.Answer, new { Name = "Whatyouwant" })
试试编辑器。 如果要确保即使属性类型不是字符串,也要呈现文本框,则可以将字符串作为模板名称传递。如果属性已经是字符串,则不需要显式templatename
来呈现文本框,因此您可以传递null
。请注意,它不需要显式的 id 参数,它会从元素名称推断它。所有验证内容仍然在 EditorFor 中处于活动状态
@Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
Ben 的回答得到了我想要的东西,除了你需要用 Html.Raw 包装
@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
有点"不漂亮"=),尝试:
@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
,它有效!我希望对您有所帮助!
@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })
不确定中间的两个字符串参数中的哪一个可以正常工作,但只有当我键入这两个参数时,它才有效。
在本例中,我根据权限禁用表单字段,但仍显示它们。我有一个隐藏字段将值发送到控制器,但希望在 EditorFor 中使用不同的字段名称。模型值后的第一个参数表示"name"属性,第二个参数是新名称。
@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" />
保持简单,您已经提供了ID,您应该能够简单地使用方法"TextBox"而不是"TextBoxFor",它将在客户端和服务器端正常工作。此外,虽然接受的答案可以工作,但如果您使用浏览器检查标签,则会在标签上生成重复的 Name 属性。下面的解决方案没有这个问题。
MvcHtmlString Html.TextBox(string name, string value, object htmlAttributes)
@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }