Мое действие контроллера MVC 3 не десериализовывает данные JSON из моего поста AJAX.
- Fiddler показывает, что данные передаются правильно.
- Я поставил точку останова на переменную x = "ok!";и он попадает в нее каждый раз.
- Когда contentType удаляется из
.ajax()
, объект адреса создается, но свойства имеют нулевые значения. - Если в запросе указан contentType,объект адреса имеет значение null.
- Я пытался поместить
[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; }
}
My 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-запрошено с: XMLHttpRequest
- Accept-Language: en-us
- Referer: http://localhost.:59872/Settings/Addresses?Length=8
- Accept: application / json, text / javascript, * / *;q = 0,01
- Тип содержимого: application / json;charset = utf-8
- Accept-Encoding: gzip, deflate
- Пользователь-агент: 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; Media 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
- Соединение: Keep-Alive
- Прагма:no-cache
- Cookie: __RequestVerificationToken_Lw __ = IBBY7VzoqxMI .... (оставшаяся строка перерезана)
- ASP.NET_SessionId = fsjywpn4gqasszgcdgmkqd4p
- * 1066 "1066"":" 1 Main Street "," City ":" Beach City "," State ":" FL "," Zip ":" 99999 "}