sag*_*y36 72 asp.net-mvc checkboxfor
我想知道的是Html.CheckBoxFor
ASP.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元素属性.
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)
上面的代码会在启动时生成一个选中的复选框,即使表单中的错误也会保留您的选择.
我遇到了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)
把它放在你的模型上:
[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)
哪个会输出这个:
如果单击复选框或粗体标签,将选中/取消选中该复选框
归档时间: |
|
查看次数: |
299877 次 |
最近记录: |