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

Rob*_*ett 94 c# html-helper razor asp.net-mvc-3

是否可以在使用Html.TextBoxFor时覆盖name属性?

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

我尝试过以下方法:

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

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

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

ana*_*lov 221

Rob,实际上有一种更简单的方法.而不是名称,使用名称:

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

  • 区分大小写的是@highwingers,这个微小的细节有可能节省数小时. (11认同)
  • 在ASP.NET 4中,提供`Name`会产生两个属性,`Name`和`name`,而模型binder使用`name`. (10认同)
  • Overkill ..名称,但ID为X_X (3认同)
  • 很奇怪,“ id”不区分大小写(与ID和id兼容),但“ name”则不区分大小写。 (2认同)
  • 但是处理两个名称仅因大小写不同而不同的属性是维护噩梦的秘诀...... (2认同)

Jam*_*ack 41

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

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

  • 是的,他们很好地隐藏了一个,不是:) (2认同)

Pro*_*one 13

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

 @Html.EditorFor(expression, null, name)
Run Code Online (Sandbox Code Playgroud)


Ali*_*avi 10

它被称为“微软陷阱” ...

使用大写的名称,就像这样

@Html.TextBoxFor(m => m.Reply.Answer, new { Name = "Whatyouwant" })
Run Code Online (Sandbox Code Playgroud)


arc*_*hil 8

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

 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
Run Code Online (Sandbox Code Playgroud)


Rip*_*ess 7

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

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
Run Code Online (Sandbox Code Playgroud)