正确使用.net MVC Html.CheckBoxFor

sag*_*y36 72 asp.net-mvc checkboxfor

我想知道的是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> 
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*nik 119

这不是正确的语法

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

@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });
Run Code Online (Sandbox Code Playgroud)

第一个参数必须标识模型中的布尔属性(它是表达式而不是返回值的匿名方法),第二个属性定义任何其他HTML元素属性.我不是100%确定上述属性最初会检查您的复选框,但您可以尝试.但要注意.即使它可能有效,但在加载有效的模型数据并将该特定属性设置为时,您可能会遇到问题false.

正确的方法

虽然我的正确建议是将初始化模型提供给您的视图,并将该特定布尔属性初始化为true.

物业类型

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

其他帮手

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

@Html.CheckBox("templateId", new { value = item.TemplateID, @checked = true });
Run Code Online (Sandbox Code Playgroud)

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

  • `checked`应该是`@ checked` (3认同)
  • 非常感谢你向我解释....似乎这个HTML助手真让我头疼.我接受了你的建议并将isChecked属性初始化为TRUE. (2认同)

T G*_*pta 16

默认情况下,以下代码不会生成选中的复选框,因为模型属性会覆盖html属性:

@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });
Run Code Online (Sandbox Code Playgroud)

相反,在您的GET Action方法中,需要执行以下操作:

model.SomeBooleanProperty = true;
Run Code Online (Sandbox Code Playgroud)

即使模型无效(即在发布表单时出现一些错误),上面将保留您的选择(如果取消选中此框).

但是,以下代码肯定会生成一个选中的复选框,但不会保留取消选中的响应,而是每次在表单中的错误时选中复选框.

 @Html.CheckBox("SomeBooleanProperty", new { @checked = "checked" });
Run Code Online (Sandbox Code Playgroud)

UPDATE

//Get Method
   public ActionResult CreateUser(int id)
   {
        model.SomeBooleanProperty = true;         
   }
Run Code Online (Sandbox Code Playgroud)

上面的代码会在启动时生成一个选中的复选框,即使表单中的错误也会保留您的选择.


Kir*_*ohn 8

我遇到了ASP.NET MVC 5的问题,即使我的模型显然将值设置为true,CheckBoxFor也不会检查服务器端验证失败的复选框.我的Razor标记/代码看起来像:

@Html.CheckBoxFor(model => model.MyBoolValue, new { @class = "mySpecialClass" } )
Run Code Online (Sandbox Code Playgroud)

要使其工作,我必须将其更改为:

@{
    var checkboxAttributes = Model.MyBoolValue ?
        (object) new { @class = "mySpecialClass", @checked = "checked" } :
        (object) new { @class = "mySpecialClass" };
}
@Html.CheckBox("MyBoolValue", checkboxAttributes)
Run Code Online (Sandbox Code Playgroud)


Jam*_*ray 6

把它放在你的模型上:

[DisplayName("Electric Fan")]
public bool ElectricFan { get; set; }

private string electricFanRate;

public string ElectricFanRate
{
    get { return electricFanRate ?? (electricFanRate = "$15/month"); }
    set { electricFanRate = value; }
}
Run Code Online (Sandbox Code Playgroud)

这在你的cshtml中:

<div class="row">
    @Html.CheckBoxFor(m => m.ElectricFan, new { @class = "" })
    @Html.LabelFor(m => m.ElectricFan, new { @class = "" })
    @Html.DisplayTextFor(m => m.ElectricFanRate)
</div>
Run Code Online (Sandbox Code Playgroud)

哪个会输出这个:

MVC输出 如果单击复选框或粗体标签,将选中/取消选中该复选框