gpt4 book ai didi

jquery - 将复选框序列化为 bool 属性和 MVC 绑定(bind)问题

转载 作者:行者123 更新时间:2023-12-01 01:13:29 24 4
gpt4 key购买 nike

在我的 ASP.NET MVC 应用程序中,我有一个具有 bool 属性的模型

public class MyModel
{
[DisplayName("Inherit")]
public bool IsInherit{get;set;}
}

Razor View

<form id="myform">
@Html.CheckBoxFor(x=>x.IsInherit)
</form>

这会将 html 页面呈现为(假设 IsInherit 为 true)

<form id="myform">
<input name="IsInherit" id="IsInherit" type="checkbox" checked="checked" value="true" data-val-required="The Inherit field is required." data-val="true">
<input name="IsInherit" type="hidden" value="false">
</form>

当选中复选框时,如果我使用 jQuery $("#myform").serialize() 序列化表单,则结果字符串为

IsInherit=true&IsInherit=false

在 AJAX POST 上,MVC 的数据绑定(bind)按预期正确将模型属性值设置为 true

但是,在某些情况下,我需要将表单序列化为对象。为此,我有下面的自定义 jquery 扩展方法,将表单序列化为对象

(function() {
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
})(jQuery)

当我使用此扩展方法$("#myform").serializeObject()序列化表单时,生成的对象具有数组类型的IsInherit属性,具有两个值truefalse

当我 AJAX POST json 对象到服务器时,MVC 投标不起作用。我收到错误 The Inherit field is required.

如何解决这个问题?

请注意,问题在于选中复选框时,因为选中复选框时 serializeObject 方法会创建数组类型的属性,我猜 MVC 绑定(bind)不知道如何绑定(bind)它。
如果未选中复选框,则一切正常

最佳答案

我修改了我的 JavaScript 并使用按位运算符 | 来设置该值(如果它是 bool 值)

(function () {
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name]) {
if ((typeof (this.value) === "boolean") ||
(typeof (this.value) === "string" && this.value != undefined && (this.value.toLowerCase() === "true" || this.value.toLowerCase() === "false"))) {
o[this.name] = ((o[this.name] == "true") | (this.value == "true")) ? true : false; //Sets value to true if one of two bits is true
}
else {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
}
} else {
o[this.name] = this.value || '';
}
});
return o;
};
})(jQuery)

关于jquery - 将复选框序列化为 bool 属性和 MVC 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46186562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com