C# 不向控制器发送数据的编辑器
我有以下代码:C# 不向控制器发送数据的编辑器,c#,asp.net-mvc,asp.net-mvc-3,editorfor,C#,Asp.net Mvc,Asp.net Mvc 3,Editorfor,我有以下代码: @Html.EditorFor(model => model.NoteRateGreaterThan, null, "advSearchInput", null) 问题是,当post完成时,我为“NoteRateGreaterThan”输入的值没有填充到发送给控制器的模型中。但是,当我将其更改回: @Html.EditorFor(model => model.NoteRateGreaterThan) 它起作用了 我需要能够使用第一个代码,因为我需要能够更改“ed
@Html.EditorFor(model => model.NoteRateGreaterThan, null, "advSearchInput", null)
问题是,当post完成时,我为“NoteRateGreaterThan”输入的值没有填充到发送给控制器的模型中。但是,当我将其更改回:
@Html.EditorFor(model => model.NoteRateGreaterThan)
它起作用了
我需要能够使用第一个代码,因为我需要能够更改“editorfor”输入的宽度,根据我的研究,唯一的方法是通过css(“advSearchInput”是类)
有什么想法吗?我不确定你认为你的第一个例子是什么,但不是那样。EditorFor无法指定Html属性,例如类。您必须使用更基本的方法,如Html.TextBoxFor EditorFor的第三个参数是htmlFieldName,它用于在元素ID重复时消除歧义 这就是为什么没有填充字段,因为您正在更改名称 编辑: 从MVC 5.1开始,EditorFor现在允许您通过以下语法传递html属性:
@Html.EditorFor(model => model.Foo, new { htmlAttributes = new { @class = "whatever" }})
在更高版本的MVC EditorFor中,确实能够使用以下语法指定HTML属性,例如类:
@Html.EditorFor(model => model.NoteRateGreaterThan, new { htmlAttributes = new { @class = "form-control" } })
如果您想在CSS中使用元素ID而不是类,那么您可以使用元素#noterategreatetherthan
您尝试使用的语法将在编辑器上设置自定义元素ID。当有多个控件引用同一模型属性时,这非常有用。如果要设置此控件的样式,可以使用CSS选择器#advSearchInput
但是,正如您所注意到的,虽然ID已更改的编辑器将从模型中获取值,但只有一个重复控件可以更新回模型中,并且它始终是没有自定义ID的控件。由于没有自定义ID的此模型属性的控件,因此不会将值写入模型中
编辑内容包括关于版本的警告。我想你是那个对我的答案投了否决票的人,我的答案是2.5年前给出的。当时,您无法传递html属性。对于那个时候不存在的东西,否决旧的答案并不是特别有运动性,你们不觉得吗?我对你的答案投了否决票,因为你忘了提到这只适用于MVC5.1或更高版本,而最初的问题是关于MVC3的,这个语法不适用于MVC3。