MVC3 中的复选框不会从模型中刷新
本文关键字:模型 刷新 复选框 MVC3 | 更新日期: 2023-09-27 18:32:32
我的复选框正在更新数据库,但在刷新时"选中"值不存在。
<input type="checkbox" id="chkPriorityOnly" @if(Model.PriorityOnly){<text> checked="checked" </text>}/> Priority Only <br />
然后按照建议,我使用了:
@Html.CheckBoxFor(model => Model.PriorityOnly, new { id = "chkPriorityOnly" }) Priority Only<br />
这是我保存选择时的 html:
<input id="chkPriorityOnly" name="PriorityOnly" type="checkbox" value="true" /><input name="PriorityOnly" type="hidden" value="false" /> Priority Only<br />
这是我的保存:
function OnRestrictionsSaveClick() {
$.ajax({
type: 'POST',
url: '@Url.Content("~/Audience/UpdateRestrictions?audienceID=" + Model.AudienceID)'
+ '&priorityOnly=' + $('#chkPriorityOnly:checked').val()
+ '&home=' + $('#chkHome:checked').val()
+ '&work=' + $('#chkWork:checked').val()
+ '&cell=' + $('#chkCell:checked').val()
+ '&text=' + $('#chkText:checked').val()
+ '&other=' + $('#chkOther:checked').val() ,
success: function (data) {SaveRestrictionsResponse(data); }
});
}
这是否会回答你的问题,但你在javascript中所做的是不正确的。
$("*:选中") 选择器将查找选中的复选框。
这意味着 $("#chkHome:checked") 如果未选中该复选框,将返回 null。
Uing .val() 将检索输入的值属性。如果选中 $("#chkHome:checked").val(),则返回 "true"(输入的值属性),否则为 null。
您应该改用 $("#chkHome").is(":checked") (如果选中则返回 true,否则返回 false)。
不要隐藏输入,而是使用:
<input type="checkbox" name="chkPriorityOnly" id="chkPriorityOnly" @(Model.PriorityOnly ? "checked=checked" : "") value="true" />
<label for="chkPriorityOnly">Priority only</label>
出于数据绑定目的,如果 name 属性与模型上的属性名称匹配(例如,PriorityOnly 与 chkPriorityOnly),也可能更好。
为什么不使用Html.CheckboxFor
方法?
@Html.CheckBoxFor(model => model.PriorityOnly) Priority Only<br />
至少可以说,您进行 AJAX 保存的方式是不可靠的。您正在指定 POST 但构建一个查询字符串,这很奇怪。
相反,请尝试:
function OnRestrictionsSaveClick() {
$.post({
url: '@Url.Action("UpdateRestrictions", "Audience")',
data: $("input:checkbox").serialize(),
success: function(data) { SaveRestrictionsResponse(data); }
});
}
这样,jQuery就可以为您完成构建POST请求数据的繁重工作,自动获取所有选中复选框的值。尚未选中的复选框将不会发送,因此传递给 UpdateLimits() 操作的视图模型应将所有布尔属性默认为"false"(模型绑定器会自动将选中的属性设置为 "true"。
此外,还可以使用 Url.Action
方法为所需操作生成 URL。切勿将 URL 硬编码到操作。始终使用UrlHelper
或HtmlHelper
路由感知方法之一来构建这些 URL。这是因为它们将遵循您的路由表,因此您可以轻松更改路由,而无需更改视图中的 URL。
当表单发布时,仅发布选中的复选框。并且由于Html.CheckBoxFor具有隐藏字段:如果未选中复选框,则会发布隐藏字段的假值而不是任何内容(请注意,隐藏字段与复选框同名)
试试这个:
+ '&priorityOnly=' + $('#chkPriorityOnly').val()
取而代之的是:
+ '&priorityOnly=' + $('#chkPriorityOnly:checked').val()