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

使用Html.TextBoxFor来覆盖name属性是否可能?

我尝试过没有成功。 我需要使用TextBoxFor获取客户端validation工作,但是由于我不会去的原因,我需要的文本框的名称不同于生成的。

我已经尝试了以下内容:

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

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

更新 :查看TextBoxFor的代码。 这看起来不是一个简单的方法。 希望有人能certificate我错了。

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

我从Brad Wilson的博客里学到了很多东西。

罗布,其实有一个更简单的方法。 使用名称而不是名称

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

EditorFor有一个重载,你可以提供name属性作为参数:

  @Html.EditorFor(expression, null, name) 

试试EditorFor 。 如果要确保文本框即使属性types不是string,也可以传递string作为模板名称。 如果属性已经是string了,那么它不需要显式地使用templatename来渲染文本框,所以你可以传递null 。 请注意,它不需要明确的id参数,它会从元素名称中推断出来。 而所有的validation事情仍然在EditorFor中处于活动状态

  @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data") 

本的回答让我知道我在找什么,除非你需要用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" } })