.NET MVC Html.CheckBoxFor的正确使用(Proper usage of .ne

2019-06-18 10:24发布

所有我想知道的是在正确的语法Html.CheckBoxFor在ASP.NET MVC HTML帮手。

我正在试图完成是用一个ID值进行初始检查复选框,所以我可以在控制器中引用它,看它是否仍然检查与否。

以下将是正确的语法?

@foreach (var item in Model.Templates) 
{ 
    <td> 
        @Html.CheckBoxFor(model => true, item.TemplateId) 
        @Html.LabelFor(model => item.TemplateName)
    </td> 
}

Answer 1:

这是不正确的语法

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

@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元素属性的方式。



Answer 2:

默认情况下,下面的代码不会生成一个检查复选框中模特属性重写HTML属性:

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

相反,在你的GET Action方法,下面需要做的事情:

model.SomeBooleanProperty = true;

以上将保留您的选择 (如果您取消选中该复选框),即使模型是无效的(即上张贴的形式出现一些错误)。

但是,下面的代码肯定会产生一个选中的复选框, 但不会保留您取消选中的反应 ,而不是使选中复选框在表单错误每次。

 @Html.CheckBox("SomeBooleanProperty", new { @checked = "checked" });

UPDATE

//Get Method
   public ActionResult CreateUser(int id)
   {
        model.SomeBooleanProperty = true;         
   }

上面的代码会产生在启动时有一个检查复选框,也将保留,即使在形式的错误选择。



Answer 3:

我与ASP.NET MVC 5个问题,其中CheckBoxFor不会检查我的复选框在服务器端验证失败,即使我的模型显然有设置为true值。 我的剃须刀标记/代码看上去像:

@Html.CheckBoxFor(model => model.MyBoolValue, new { @class = "mySpecialClass" } )

为了得到这个工作,我不得不将其更改为:

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


Answer 4:

将这个你的模型:

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

private string electricFanRate;

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

这在你的CSHTML:

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

将输出这样的:

如果你点击复选框或大胆的标签,它会检查/取消选中该复选框



Answer 5:

以上答案都不对POST绑定回来的时候为我工作,直到我加入CSHTML以下

<div class="checkbox c-checkbox">
    <label>
        <input type="checkbox" id="xPrinting" name="xPrinting" value="true"  @Html.Raw( Model.xPrinting ? "checked" : "")>
        <span class=""></span>Printing
    </label>
</div>


// POST: Index

[HttpPost]
public ActionResult Index([Bind(Include = "dateInHands,dateFrom,dateTo,pgStatus,gpStatus,vwStatus,freeSearch,xPrinting,xEmbroidery,xPersonalization,sortOrder,radioOperator")] ProductionDashboardViewModel model)


Answer 6:

我一直在寻找解决这样从数据库中动态显示标签:

checkbox1 : Option 1 text from database
checkbox2 : Option 2 text from database
checkbox3 : Option 3 text from database
checkbox4 : Option 4 text from database

所以没有上述解决方案的工作了我,所以我使用的是这样的:

 @Html.CheckBoxFor(m => m.Option1, new { @class = "options" }) 
 <label for="Option1">@Model.Option1Text</label>

 @Html.CheckBoxFor(m => m.Option2, new { @class = "options" }) 
 <label for="Option2">@Mode2.Option1Text</label>

这样,当用户会点击标签,复选框会被选中。

也许是它可以帮助别人。



Answer 7:

我有麻烦这项工作,并添加任何人想要另一种解决方案/需要使用FromCollection。

代替:

@Html.CheckBoxFor(model => true, item.TemplateId) 

格式HTML帮助像这样:

@Html.CheckBoxFor(model => model.SomeProperty, new { @class = "form-control", Name = "SomeProperty"})

然后在视图模型/模型无论你的逻辑是:

public void Save(FormCollection frm)
{   
    // to do instantiate object.

    instantiatedItem.SomeProperty = (frm["SomeProperty"] ?? "").Equals("true", StringComparison.CurrentCultureIgnoreCase);

    // to do and save changes in database.
}


文章来源: Proper usage of .net MVC Html.CheckBoxFor