如何正确使用.NET MVC Html.CheckBoxFor?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (521)

我想知道的是Html.CheckBoxForASP.NET MVC中HTML助手的正确语法。

我试图完成的任务是首先检查复选框的ID值,以便我可以在Controller中查看它是否仍被选中。

下面是正确的语法?

@foreach (var item in Model.Templates) 
{ 
    <td> 
        @Html.CheckBoxFor(model => true, item.TemplateId) 
        @Html.LabelFor(model => item.TemplateName)
    </td> 
}
提问于
用户回答回答于

这不是正确的语法

第一个参数不是复选框值,而是复选框的视图模型绑定,因此:

@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });

第一个参数必须标识模型中的布尔属性(它是表达式不是返回值的匿名方法),第二个属性定义了任何其他HTML元素属性。我不是100%确定上述属性会初步检查您的复选框,但可以尝试。但要小心。即使它可能工作,稍后可能会有问题,当加载有效的模型数据并且该特定属性设置为false

正确的方法

尽管我的建议是将初始化模型提供给你的视图,并且初始化为特定的布尔属性true

物业类型

根据Asp.net MVC HtmlHelper扩展方法和内部工作方式,复选框需要绑定到布尔值,而不是整数,看起来你想做什么。在这种情况下,一个隐藏的字段可以存储id

其他助手

当然,还可以使用其他帮助程序方法来获得有关复选框值和行为的更大灵活性:

@Html.CheckBox("templateId", new { value = item.TemplateID, @checked = true });

注意 checked 是HTML元素的布尔属性,而不是值属性,这意味着可以为其分配任何值。正确的HTML语法不包含任何赋值,但是没有办法提供具有未定义属性的匿名C#对象,该属性将呈现为HTML元素属性。

用户回答回答于

默认情况下,以下代码将生成复选框作为模型属性覆盖html属性:

@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });

相反,在GET操作方法中,需要完成以下工作:

model.SomeBooleanProperty = true;

即使模型无效(即在发布表单时发生某些错误),上面的内容仍会保留选择(如果取消选中该框)。

但是,下面的代码肯定会生成一个选中的复选框,但不会保留取消选中的响应,而是每次在窗体中出现错误时都会选中该复选框。

 @Html.CheckBox("SomeBooleanProperty", new { @checked = "checked" });
//Get Method
   public ActionResult CreateUser(int id)
   {
        model.SomeBooleanProperty = true;         
   }

上面的代码将在开始时生成一个复选框,并且即使在形式错误时也会保留选择。

扫码关注云+社区

领取腾讯云代金券