【发布时间】:2015-02-28 11:07:13
【问题描述】:
实际上这是非常简单的情况,但我找不到解决方案:我需要通过 jQuery ajax 将 JSON 字符串传递给我的 MVC 控制器,但控制器总是收到 null。 这是 jQuery:
$("#makebooking").click(function (e) {
var json;
if ($("form").valid()) {
var arr = $("form").serializeArray();
json = JSON.stringify({ 'command': arr });
}
$.ajax({
url: "@Url.Content("~/Booking/CreateBooking")",
data: json,
type: "post",
cache: false,
dataType: "json",
success: function (result) {
if (result != null) {
window.location = result;
} else {
$("#modalerror").on("show.bs.modal", function () {
var modal = $(this);
modal.find("#errormsg").text(result.Error);
});
}
},
error: function (xhr) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
});
控制器代码在这里:
[HttpPost]
public JsonResult CreateBooking(string command)
{
byte[] stream = HttpServerUtility.UrlTokenDecode(Request.Cookies["psw"].Value);
byte[] decodedValue = MachineKey.Unprotect(stream, "all");
var psw = Encoding.UTF8.GetString(decodedValue);
var a = _br.CreateBooking(User.Identity.Name, psw, command);
return Json(a);
}
我希望有人可以重新审视这段代码并提出解决方案。谢谢。
【问题讨论】:
-
你为什么要发布一个字符串(而不是发布你的模型)?
-
@StephenMuecke,我不确定你的意思。你能解释一下吗?
-
你方法中的参数是
string command?你有一个我假设是基于模型的表单,在这种情况下,你应该使用data: $('form').serialize(),发回你的模型,方法应该是`public JsonResult CreateBooking(YourModel model)` -
是的,基于 ViewModel 的表单。刚才我厌倦了使用模型作为参数但没有成功 - 所有数据都是空的。
-
我使用字符串的另一个原因 - 我需要处理这些数据,以便将其重新创建为 urlencoded 字符串以调用外部 Web 服务。
标签: jquery json asp.net-mvc asp.net-mvc-controller