C#ASP.MVC使用Html.EditFor和JavaScript获取复选框值

时间:2017-05-09 17:10:38

标签: javascript c# jquery asp.net asp.net-mvc

只是想知道,想象一下,我有一个像这样的复选框:

var situationcontrol = $("#situationcontrol").prop('checked');

我可以使用此JavaScript代码检查是否已选中:

@Html.EditorFor

现在我想知道如果使用@Html.EditorFor(model =>Model.ServiceDeliveryMutableObjects.SituationControl)

创建一个复选框,这将如何工作

像这样:

var situationcontrol = $("#ServiceDeliveryMutableObjects.SituationControl").prop('checked');

我尝试使用新生成的ID更改相同的JavaScript代码

@Html.EditFor

但这似乎不起作用。 任何想法如何工作?

由于

编辑:当我使用schemaField[schema.FieldName] = { type: schema.FieldType, editable: schema.FieldEditable, validation: { // note the ":" required: schema.FieldRequired } } 时在浏览器中检查元素时 enter image description here

2 个答案:

答案 0 :(得分:2)

修改

在发布渲染输出之前,没有捕捉到它。 .在HTML ID中无效,因此Razor会使用下划线。因此,您应该选择的ID是#ServiceDeliveryMutalObjects_SituationalControl,而不是#ServiceDeliveryMutalObjects.SituationalControl。除此之外,我的原始答案的其余部分适用。

<强> ORIGINAL

首先,实际上最好使用:

$('#foo').is(':checked')

现在,至于使用EditorFor技术上,这不会改变任何东西。 id显然将基于对象图,即#ServiceDeliveryMutalObjects_SituationalControl,但没有任何关于HTML元素的实际呈现的变化。我在这里强调“技术上”,因为虽然应该是这种情况,但是没有默认的编辑器模板会实际呈现复选框输入。默认为文本框和文本框,显然不具有checked属性。这可以通过以下任一方式纠正:

  1. 请改用CheckBoxFor。这样,您就可以确保获得实际的复选框输入。

  2. 假设此属性是布尔值,您可以使用以下内容创建视图Views/Shared/EditorTemplates/Boolean.cshtml

    @model bool?
    @Html.CheckBox("", Model)
    

    然后,EditorFor将使用此模板,并生成一个复选框输入。

  3. 最后,它可能只是你问题中的拼写错误,但你需要在表达式的右侧使用小写的“模型”,而不是“模型”。换句话说,它需要匹配lambda的左侧。我倾向于避免在这些表达式中使用model,因为不仅需要输入比需要的更多,而且很容易在“模型”和“模型”之间混淆,特别是使用Intellisense的自动完成。例如,

    @Html.EditorFor(m => m.ServiceDeliveryMutableObjects.SituationControl)
    

答案 1 :(得分:2)

您可以像这样更改代码

Var situationcontrol =  $("#ServiceDeliveryMutableObjects_SituationControl").prop('checked');

你需要删除 mvc reazor视图中的元素ID。它将转换'。'当我们提供元素名称时,要“_”