ASP.NET MVC EditorForModel ID命名

时间:2018-06-22 13:06:47

标签: jquery asp.net-mvc

在MVC5中,我使用EditorForModel和EditorTemplate在表中显示来自我的模型的IEnumberable数据,用户可以在其中进行编辑。 MVC似乎以'<row number>.<model property>'的格式命名控件的id字段。

例如,表第四行上的复选框控件@Html.CheckBoxFor(x => Model.Bold...的ID为[3].BoldText

当我尝试使用JQuery通过选择器$('#[3].BoldText')获取该控件的值时,由于[或句点,JQuery引发了我怀疑的错误。有什么办法可以使用EditorForModel设置命名格式?

或者,有没有办法使用这种格式的ID来获取Javascript中该复选框的值?

我尝试了以下任何一项都无法工作...

$('#[3].BoldText')
$("input[id='[3].BoldText']")
document.getElementById('[3].BoldText')

1 个答案:

答案 0 :(得分:1)

您的代码将不会生成任何id属性-您看到的是name属性。默认情况下,HtmlHelpers.(下划线)替换[中的]name_字符。但是由于符合HTML-4规范,因此将是无效的,因此省略了id属性。

有关详细说明,请参见Razor: If model is List<> then @Html.LabelFor creates empty “for” field

您可以更改选择器以使用name属性

$("input[name='[3].BoldText']")

或者,使用包含您的collection属性的视图模型,以及一个EditorTemplatefor循环来生成html,以便您的html看起来像(假设该属性名为{{1} })

Items

,以便您随后可以使用<input type="checkbox" name="Items[0].BoldText" id="Items_0__BoldText" ... /> 选择器

id