JQu*_*ile 116 c# asp.net-mvc-4
我正在开发一个ASP.NET MVC 4应用程序.这个程序有一个基本形式.我的表单模型如下所示:
public class MyModel
{
public string Name { get; set; }
public bool Remember { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的表单中,我有以下HTML.
<input id="Name" name="Name" type="text" value="@Model.Name" />
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
<label for="Remember"> Remember Me?</label>
Run Code Online (Sandbox Code Playgroud)
当我发布表单时,模型中的记住值始终为false.但是,模型中的Name属性具有值.我通过在以下设置断点来测试这个:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
Console.WriteLine(model.Remember.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚.为什么Checkbox值没有设置?
web*_*per 202
@Html.EditorFor(x => x.Remember)
Run Code Online (Sandbox Code Playgroud)
会产生:
<input id="Remember" type="checkbox" value="true" name="Remember" />
<input type="hidden" value="false" name="Remember" />
Run Code Online (Sandbox Code Playgroud)
它是如何工作的:
checkbox
未选中,则表单仅提交hidden
值(false)true
将为模型的bool
属性提交两个字段(false和true)和MVC集
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
如果选中,它将始终发送默认值.
Dan*_*mer 66
由于您使用Model.Name来设置值.我假设您将空视图模型传递给View.
因此,Remember的值为false,并将checkbox元素的值设置为false.这意味着当您选择复选框时,您将使用表单发布值"false".如果不选择它,则不会发布,因此模型默认为false.这就是为什么你在两种情况下都看到了错误的价值.
只有在选中复选框时才会传递该值.在Mvc中使用复选框
@Html.CheckBoxFor(x => x.Remember)
Run Code Online (Sandbox Code Playgroud)
或者如果您不想将模型绑定到视图.
@Html.CheckBox("Remember")
Run Code Online (Sandbox Code Playgroud)
当没有选择时,Mvc会使用隐藏字段来保持值.
编辑,如果你真的厌恶这样做,并希望自己生成元素,你可以做到.
<input id="Remember" name="Remember" type="checkbox" value="true" @(Model.Remember ? "checked=\"checked\"" : "") />
Run Code Online (Sandbox Code Playgroud)
小智 15
仅使用此功能
$("input[type=checkbox]").change(function () {
if ($(this).prop("checked")) {
$(this).val(true);
} else {
$(this).val(false);
}
});
Run Code Online (Sandbox Code Playgroud)
代替
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
Run Code Online (Sandbox Code Playgroud)
用:
@Html.EditorFor(x => x.Remember)
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个专门用于记住的复选框