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


99

使用Html.TextBoxFor覆盖名称属性时可能吗?

我尝试没有成功。我需要使用TextBoxFor来使客户端验证正常工作,但是出于我不愿讨论的原因,我需要文本框的名称与生成的名称不同。

我尝试了以下方法:

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

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

更新:查看TextBoxFor的代码。看起来没有简单的方法。希望有人能证明我错了。


什么是“数据”的数据类型
archil 2011年


2
这些问题提出的要求略有不同。另外-这是三个中的较大者,所以我认为您的意思是重复。
罗伯·史蒂文森-莱杰特

Answers:


234

Rob,实际上有一种简单得多的方法。代替name,使用Name

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

11
区分大小写是@highwingers,这个微小的细节有可能节省时间。
anar khalilov

3
名字,但编号X_X
Vladimirs,

2
很奇怪,“ id”不区分大小写(可以使用ID和id很好地工作),但“ name”则不区分大小写。
Vladimirs

10
在ASP.NET 4中,通过和提供Name两个属性的结果,而模型绑定器使用。Namenamename
GSerg 2014年

1
但是处理两个名称仅因大小写而不同的不同属性是维护噩梦的秘诀……..
James McCormack 2014年


13

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

 @Html.EditorFor(expression, null, name)

1
如果我在这小时前发现,它会为我节省几个小时,哈哈
约翰尼·卡尔

有趣的是,但是对于类似DropDownListFor这样的类似帮助器的name属性,没有重载,您必须在html properties参数中指定它(在Name中使用大写N)。
nmit026 '19

8

尝试使用EditorFor。如果要确保呈现文本框,即使属性类型不是字符串,也可以将字符串作为模板名称传递。如果property已经是字符串,则不需要templatename显式呈现文本框,因此可以传递null。请注意,它不需要显式要求id参数,它将根据元素名称进行推断。而且所有的验证工作仍在EditorFor中处于活动状态

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

7

本的答案让我得到了我想要的东西,除了您需要用HTML封装。

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



1

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

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

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

不确定中间的这两个字符串参数中的哪一个可以完成工作,但是只有当我键入它们两个时,它才起作用。


这是ID和名称。这对我有用。我经历了以上所有答案,但没有一个起作用,但这是1.谢谢。
Orion

public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);。不知道templateName应该是什么,所以我用了null。因为htmlFieldName我使用了参数的名称(在我的情况下是“ ipmi”而不是“ IPMI”)。那对我有用。
BCdotWEB

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" /> 

0

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

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

@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.