gpt4 book ai didi

jquery - 通过 AJAX 而不是回发进行模型绑定(bind)复选框时出现 MVC 3 问题

转载 作者:行者123 更新时间:2023-12-01 01:27:55 25 4
gpt4 key购买 nike

我在使用包含 bool 值的自定义对象将表单中的复选框绑定(bind)到服务器上的操作时遇到问题。

google了一下,似乎有很多问题,并没有好的解决方案。我已经尝试了多种方法,问题似乎只发生在通过 ajax 调用而不是正常的回发发送时。

我的项目中有以下内容(为简洁起见,进行了删减):

查看

@Html.LabelFor(model => model.TillAccess)
@Html.CheckBoxFor(m => m.TillAccess)

型号

public class CreateUserModel 
{
public Boolean TillAccess { get; set; }
}

Controller 操作

[HttpPost]
public virtual ActionResult CreateUserWizard(CreateUserModel model)
{
...
}

我在表单中添加了 2 个按钮,其中一个作为回发发送并且可以工作。如果我在 fiddler2 上检查它,它会发送以下内容并回发:

TillAccess=true&TillAccess=false

如果我使用ajax按钮发送它,它会发送以下内容,但不起作用:

{"TillAccess":["true","false"]}

MVC 模型绑定(bind) JSON 的方式是否存在问题导致此工作停止?

我无法通过 AJAX(我将大量使用它)来实现此功能,所有其他字段都可以很好地绑定(bind),只是复选框除外,事实上,它作为正常的回发完美地工作,这表明它是 JSON 序列化程序的问题或者 MVC 的模型绑定(bind)器?

更新

ajax调用如下:

function CreateUser() {
var FormData = JSON.stringify($('#CreateUserWizardForm').serializeObject());

$.ajax({
url: '@Url.Action(MVC.User.User.ActionNames.CreateUserWizard)',
data: FormData,
contentType: "application/json",
dataType: "json",
type: 'POST',
cache: 'false',
success: function (response) {
alert('successfully created user!');
},
error: function (xhr) {
alert('There was an error creating a user');
}
});
}

完整的ajax帖子如下仅供引用:

{"BusinessUnitId":"cd56b710-0171-11e1-be50-0800200c9a66","Person.Salutation":"","Person.FirstName":"","Person.LastName":"","‌​TillAccess":["true","false"],"OfficeAccess":"false","TillLoginId":"","OfficeEmail‌​Address":"","OfficePassword":""}

更新

serializeObject 方法是从互联网下载的(因为我在帖子中遇到了 json 问题),如下所示:

$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
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;
};

更新

我使用此serializeObject方法的原因是由于我使用以下内置调用时收到的错误:

$('#CreateUserWizardForm').serialize()

它创建了一个帖子:

BusinessUnitId=cd56b710-0171-11e1-be50-0800200c9a66&Person.Salutation=&Person.FirstName=&Person.LastName=&TillAccess=true&TillAccess=false&OfficeAccess=false&TillLoginId=&OfficeEmailAddress=&OfficePassword=

这给了我一个错误,如下:

System.ArgumentException: Invalid JSON primitive: BusinessUnitId.

更新 - 答案(我尝试在底部添加我的答案,但它不允许)

我找到了解决方案。这是我的 AJAX 调用错误。我将其更改为以下内容并且它正在工作。

$.ajax({
url: '@Url.Action(MVC.User.User.ActionNames.CreateUserWizard)',
data: $('#CreateUserWizardForm').serialize(),
type: 'POST',
cache: 'false',
success: function (response) {
alert('successfully created user!');
},
error: function (xhr) {
alert('There was an error creating a user');
}
});

旧的 AJAX 调用:

var FormData = JSON.stringify($('#CreateUserWizardForm').serializeObject());

$.ajax({
url: '@Url.Action(MVC.User.User.ActionNames.CreateUserWizard)',
data: FormData,
contentType: "application/json",
dataType: "json",
type: 'POST',
cache: 'false',
success: function (response) {
alert('successfully created user!');
},
error: function (xhr) {
alert('There was an error creating a user');
}
});

最佳答案

我找到了解决方案。这是我的 AJAX 调用错误。我将其更改为以下内容并且它可以工作。

$.ajax({
url: '@Url.Action(MVC.User.User.ActionNames.CreateUserWizard)',
data: $('#CreateUserWizardForm').serialize(),
type: 'POST',
cache: 'false',
success: function (response) {
alert('successfully created user!');
},
error: function (xhr) {
alert('There was an error creating a user');
}
});

旧的 AJAX 调用:

var FormData = JSON.stringify($('#CreateUserWizardForm').serializeObject());

$.ajax({
url: '@Url.Action(MVC.User.User.ActionNames.CreateUserWizard)',
data: FormData,
contentType: "application/json",
dataType: "json",
type: 'POST',
cache: 'false',
success: function (response) {
alert('successfully created user!');
},
error: function (xhr) {
alert('There was an error creating a user');
}
});

关于jquery - 通过 AJAX 而不是回发进行模型绑定(bind)复选框时出现 MVC 3 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268086/

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