我的控制器能够创建模型对象,但所有属性都与模型相关并分配给空值
环境:VS 2010,ASP.NET MVC RC最新,jQuery 1.7.1
以下是Web API控制器代码
public class Customer
{
public string Name { get; set; }
public string City { get; set; }
}
public class UserController : ApiController
{
public Customer Post(Customer user)
{
return user;
}
}
以下是ajax调用代码
$.ajax('/api/user',
{
ContentType: "application/x-www-form-urlencoded; charset=UTF-8",
dataType: 'json',
type: 'POST',
data: JSON.stringify({ "Name": "Scott", "City": "SC" })
});
Controller会创建模型“Customer”对象,但“Name”和“City”属性都为null。
这里有什么问题?
我在这个网站上已经阅读了很多类似的问题,但找不到解决方案。
答案 0 :(得分:2)
This blog这里提供了一个关于模型绑定在ASP.NET Web项目和ASP.NET Web API项目中有何不同的好主意。
我在我正在处理的项目中遇到了类似的问题,并添加了一个显式的ModelBinding属性,使得属性值保持不变
请求的数据:
var customer = { Name : "customer Name", City : "custome City" }
$.ajax({
url : ...
type: ...
data : customer
});
请求类:
public class Customer
{
public string Name { get; set; }
public string City { get; set; }
}
控制器:
public class UserController : ApiController
{
[HttpGet]
public Customer Get([ModelBinder] Customer user)
{
// fetch from whereever
}
}
答案 1 :(得分:1)
我现在正在经历同样的问题。我不是100%肯定答案,但下面是我的javascript,我已经添加到类[DataModel]和属性[DataMember]。那就是:
[DataModel]
public class Customer
{
[DataMember] public string Name { get; set; }
[DataMember] public string City { get; set; }
}
和我的JavaScript
$(document).ready(function () {
// Send an AJAX request
$.getJSON("api/session/GetAll",
function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, val) {
//debugger;
// Format the text to display.
//var str = val.Name + ': $' + val.Price;
var str = 'abcd';
// Add a list item for the product.
$('<li/>', { text: str })
.appendTo($('#products'));
});
});
});
答案 2 :(得分:0)
面临类似的问题,我的问题在请求正文中被证明是无效的JSON。其中一个字段后有一个逗号丢失。因此,如果JSON中存在任何语法错误,则默认模型绑定器似乎只会绑定null。
答案 3 :(得分:0)
下次发生这种情况时,请确保属性设置器上没有“internal”关键字。那是:
而不是public string Comment {get; internal set;}
使用public string Comment {get; set;}
这为我解决了。