为什么默认情况下Web API模型绑定如此复杂: 我尝试了很多组合,但似乎都没有。 这是ajax请求:
var dataString = JSON.stringify({
request: Request
});
var request = Request;
$.ajax({
type: "POST",
data: '='+dataString,
// contentType: 'application/x-www-form-urlencoded',
contentType: "application/json; charset=utf-8",
dataType: "json",
这是控制器:
public AccResultObject Post(string jezik, string page, string size, string sort,AccRequestViewModel model)
这是AccRequestViewModel
public class AccRequestViewModel
{
public AccRequestObject request { get; set; }
}
这是AccRequestObject:
public class AccRequestObject
{
public int FM { get; set; }
public int Budget { get; set; }
public string WebCatID { get; set; }
public int Distance { get; set; }
}
无论我做什么,控制器都会获得空值。
我也试过这个。这似乎很合乎逻辑:
var dataString = JSON.stringify({
request: Request
});
$.ajax({
type: "POST",
data: dataString, ...
和控制器接收AccRequestObject:
public AccResultObject Post(string jezik, string page, string size, string sort,[FromBody] AccRequestObjectmodel)
除了这个小问题外,它的效果很好。值没有绑定。
答案 0 :(得分:1)
确保您在javascript中创建的每个对象的属性与代码模型完全匹配。如果属性名称在代码模型中是大写的,则它必须在js中为大写。除此之外,将带有jquery的模型发布到Web Api控制器非常简单:
//code model
public class MyModel{
public int MyProperty{get;set;}
}
//js
$.ajax({
contentType: "application/json",
dataType: 'json',
url: 'http://api/to/my/controller',
data: JSON.stringify({MyProperty: 1}),
type: "POST"
});
答案 1 :(得分:0)
在C#中,确保您的属性为properties,而不是fields。
public class MyBindingModel
{
string myProp{ get; set; }
}