我想返回一个JSON结果。为此,我有一个控制器方法,从视图上的Ajax.BeginForm
调用:
@using (Ajax.BeginForm("Update", new AjaxOptions { OnSuccess = "MySuccessMethod()" }))
{
<!-- some form stuff -->
<input type="submit" value="Submit"/>
}
这是处理它的控制器:
[HttpPost]
public JsonResult Update(FormCollection fc)
{
// Process form stuff
return Json (new {success = true });
}
我想要的是使用MySuccessMethod
处理成功回复。我看到的是关于提交的视图转到上面正确的控制器方法,然后在页面中将以下字符串重定向到URL /Home/Update
:
{“成功”:真实}
不确定它是否相关,但我使用的是Mono。
如何让框架不将页面切换到/Home/Update
,也不在视图上显示JSON字符串,只处理后面的JSON?
答案 0 :(得分:3)
关于第一个问题,请查看以下内容:
1)确保包含Microsoft.jQuery.Unobtrusive.Ajax
并引用
2)OnSuccess = "MySuccessMethod()"
应该是OnSuccess = "MySuccessMethod"
(其中MySuccessMethod
是JavaScript
方法,而不是C#
方法
对于第二个问题,您可以让方法返回ActionResult
而不是JsonResult
(有关详细信息,请参阅here)。 JsonResult
是一种ActionResult
,这意味着更新您的操作以返回ActionResult
将允许您的方法根据方案返回多种类型的ActionResult
:
[HttpPost]
public ActionResult SomeThing(int randomParam)
{
if (randomParam == 0)
{
return Json("Zero!");
}
else if (randomParam == 1)
{
return View("Not zero!");
}
else
{
return HttpNotFound("Error: I can only find zeroes and ones");
}
}
作为一般经验法则(虽然有时规则会被打破),让您的操作返回一种类型(例如JsonResult
代替ActionResult
)会使您的操作更少错误 - 例如,如果您不小心尝试返回其他类型的结果,Visual Studio会告诉您 - 当您的操作返回多种类型的结果时,请使用ActionResult
。