所有我想知道的是在正确的语法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