ASP.NET MVC3 – 使用Javascript的Bug

我正在尝试使用Ajax.BeginForm()从我的控制器POST一个Json结果(我正在使用MVC3)。 调用Json结果时,应将其发送到javascript函数并使用提取对象

var myObject = content.get_response().get_object(); 

但是,它只是在尝试调用Ajax POST时抛出“Microsoft JScript运行时错误:对象不支持此属性或方法”。

我的代码:

控制器:

 [HttpPost] public ActionResult Index(string message) { return Json(new { Success = true, Message = message }); } 

视图:

         function JsonAdd_OnComplete(mycontext) { var myObject = mycontext.get_response().get_object(); alert(mycontext.Message); }    
@using(Ajax.BeginForm("Index", "Home", new AjaxOptions() { HttpMethod = "POST", OnComplete = "JsonAdd_OnComplete" })) { @Html.TextBox("message") }

奇怪的是,完全相同的代码在MVC2中起作用 – 这是一个错误,还是我忘记了什么?

提前致谢。

ASP.NET MVC 3 RC MS AJAX中的AFAIK已被弃用,支持所有Ajax.*帮助方法使用的jQuery。 Javascript也变得不引人注目了。 这意味着您不再需要调用.get_response().get_object()而只需:

 function JsonAdd_OnComplete(myObject) { // here myObject is already the JSON object // as returned by the controller action alert(myObject.Message); } 

你看过OnSuccess方法了吗? 当调用该方法时,传递给它的对象是一个基于JSONResult的JSON对象,所以你可以这样做……

  @using(Ajax.BeginForm("Index", "Home", new AjaxOptions() { HttpMethod = "POST", OnSuccess = "JsonAdd_OnSuccess" })) { @Html.TextBox("message")  } 

此外,OnComplete方法返回包含以下属性的对象

 context.responseText context.responseBody context.responseXml 

您必须使用eval() responseText将文本转换为JSON。

如果您使用的是BuildStarted提供的方法,那么以下是如何构建eval:

 var json = eval("(" + context.responseText + ")");