JQuery Ajax和将多个复杂对象发布到asp.net MVC控制器
`您好 向mc控制器方法发布多个参数时出现问题JQuery Ajax和将多个复杂对象发布到asp.net MVC控制器,ajax,asp.net-mvc,Ajax,Asp.net Mvc,`您好 向mc控制器方法发布多个参数时出现问题 controller... [HttpPost] public ActionResult SaveSomething(SomeDomainObject domainObject, bool anOption) { } Ajax Code... function performPostData(postDataOptions,closeWindow) { $.ajax({ type: postDataOptions.httpVerb
controller...
[HttpPost]
public ActionResult SaveSomething(SomeDomainObject domainObject, bool anOption)
{
}
Ajax Code...
function performPostData(postDataOptions,closeWindow) {
$.ajax({ type: postDataOptions.httpVerb,
url: postDataOptions.url,
datatype: "json",
traditional: true,
data: postDataOptions.data(),
success: function () {
if (closeWindow) {
var window = $('#window').data("kendoWindow");
window.close();
}
},
error: function (xhr, status, error) {
var msg = JSON.parse(xhr.responseText);
var validator = $("#editBase").kendoValidator().data("kendoValidator"),
status = $(".editValidationStatus");
var err = msg.Message;
status.text(err).addClass("invalid");
}
});
}
JScript function to format data...
function GetPostData()
{
var _domainObject={
prop1: 1,
prop2: 2,
prop3: 3
};
return JSON.stringify({ domainObject:_domainObject,anOption: true});
}
我在网络捕获中看到这是请求主体:
{"domainObject":{"prop1":1,"prop2":2,"Prop3":3},"anOption":true}
控制器引发以下异常:
The parameters dictionary contains a null entry for parameter 'anOption' of non-nullable type 'System.Boolean' for method 'System.Web.Mvc.ActionResult SaveSomething(Domain.Data.SomeDomainObject, Boolean)' in 'Reports.Controllers.TestController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters
我已经旋转了几个小时,试图得到一个简单的域对象和另一个bool类型的参数来序列化并传递给我的控制器。有什么想法吗?看起来您在jquery ajax调用中缺少了content-type参数。 您应该显式地将其设置为json,如下代码所示:
function performPostData(postDataOptions,closeWindow) {
$.ajax({ type: postDataOptions.httpVerb,
url: postDataOptions.url,
datatype: "json",
contentType: "application/json; charset=utf-8",
...rest of your code
否则将获得其默认值(请参阅):
application/x-www-form-urlencoded;字符集=UTF-8
接下来,我尝试创建一个像SaveObjectRequest这样的SaveObjectRequestObject:DomainObject{public bool AnOption{get;set;}}。这实际上可以追溯到控制器,但我的基本对象属性从未设置。事实证明,在我将控制器请求obejct展平后,我可以追溯到控制器。然后删除返回的JSON.stringify({request:SaveDomainObjectRequest});只有返回someDomainObjectRequest才有效。我会将您的回答标记为一个答案,但是,我没有时间返回并进行测试:(这个答案解决了我的问题。出于某种原因,jQuery默认值不足以让我的MVC控制器绑定复杂的集合。只需发送JSON变体(如本文所述)就可以完美绑定所有内容。非常感谢!!