4

我有以下代码:

@Html.EditorFor(model => model.NoteRateGreaterThan, null, "advSearchInput", null)

问题是,当帖子完成时,我为“NoteRateGreaterThan”输入的值没有填充到发送到控制器的模型中。但是,当我将其更改回:

@Html.EditorFor(model => model.NoteRateGreaterThan) 

有用。

我需要能够使用第一个代码,因为我需要能够更改“editorfor”输入的宽度,并且根据我的研究,唯一的方法是通过 css(“advSearchInput”是类)有什么想法吗?

4

2 回答 2

4

我不确定你认为你的第一个例子是做什么的,但事实并非如此。EditorFor 没有指定 Html 属性的能力,例如 class。您必须使用更基本的方法,例如 Html.TextBoxFor。

EditorFor 的第三个参数是 htmlFieldName,用于在元素 ID 重复时消除歧义。

这就是您的字段没有被填充的原因,因为您正在更改名称。

编辑:

从 MVC 5.1 开始,EditorFor 现在允许您通过以下语法传递 html 属性:

@Html.EditorFor(model => model.Foo, new { htmlAttributes = new { @class = "whatever" }})
于 2012-09-15T02:38:32.823 回答
0

在更高版本的 MVC EditorFor 中确实能够使用以下语法指定 HTML 属性,例如 class:

@Html.EditorFor(model => model.NoteRateGreaterThan, new { htmlAttributes = new { @class = "form-control" } })

如果您想在 CSS 中使用元素 ID 而不是类,则可以使用 element #NoteRateGreaterThan

您尝试使用的语法会在您的编辑器上设置自定义元素 ID。当您有多个控件引用相同的模型属性时,这很有用。如果你想设置这个控件的样式,你可以使用 CSS 选择器#advSearchInput

但是,正如您所注意到的,虽然具有更改 ID 的编辑器将从模型中获取值,但只有一个重复控件可以更新回模型中,并且它始终是没有自定义 ID 的那个。由于您没有自定义 ID 的此模型属性的控件,因此不会将值写入模型中。

编辑包括关于版本的警告。

于 2015-02-11T14:19:07.543 回答