【发布时间】:2011-06-07 22:03:23
【问题描述】:
我的 MVC 3 控制器操作没有反序列化我的 AJAX 帖子中的 JSON 数据。
- Fiddler 显示正确传递的数据。
- 我在 var x = "ok!"; 上设置了一个断点。线,它每次都击中它。
- 从
.ajax()中删除 contentType 时,会创建地址对象,但属性为空值。 - 使用请求中的contentType,地址对象为空。
- 我尝试将
[DataContract]和[DataMembers]放在我的POCO 上,没有区别 - 我尝试使用
IModelBinder,但StreamReader(Request.InputStream).ReadToEnd始终是“”
这是 jQuery 代码:
$("#home-validate-btn").click(function (event) {
var address =
{
Address: $('#Data_HomeAddress').val(),
City: $('#Data_HomeCity').val(),
State: $('#Data_HomeState').val(),
Zip: $('#Data_HomeZip').val()
};
$.ajax({
url: '/Settings/addressValidate',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: $.toJSON(address),
success: function (info) {
alert('ok!');
}
});
});
这是控制器代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult addressValidate(ValidateAddress address)
{
var x = "ok!";
return new JsonResult()
{
Data = (x),
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
我的 POCO:
public class ValidateAddress
{
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
我的 Global.asax.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}", // URL with parameters
new
{
controller = "Home",
action = "Index"
} // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
这是来自 Fiddler 的数据:
- POST http://localhost.:59872/Settings/addressValidate HTTP/1.1
- x-requested-with: XMLHttpRequest
- 接受语言:en-us
- 引用:http://localhost.:59872/Settings/Addresses?Length=8
- 接受:应用程序/json、文本/javascript、*/*; q=0.01
- 内容类型:应用程序/json; charset=utf-8
- 接受编码:gzip、放气
- 用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;媒体Center PC 6.0;InfoPath.2;OfficeLiveConnector.1.5;OfficeLivePatch.1.3;.NET4.0C;.NET4.0E;Creative AutoUpdate v1.40.01;msn OptimizedIE8;ENUS)
- 主机:localhost.:59872
- 内容长度:77
- 连接:保持活动状态
- 编译指示:无缓存
- Cookie:__RequestVerificationToken_Lw__=IBBY7VzoqxMI ....(字符串的其余部分被剪断)
- ASP.NET_SessionId=fsjywpn4gqasszgcdgmkqd4p
- {"Address":"1 Main Street","City":"Beach City","State":"FL","Zip":"99999"}
【问题讨论】:
标签: asp.net-mvc json model-binding