在不切换视图的情况下返回JSONResult

时间:2014-12-09 23:16:44

标签: c# ajax json mono jsonresult

我想返回一个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?

1 个答案:

答案 0 :(得分:3)

关于第一个问题,请查看以下内容:

1)确保包含Microsoft.jQuery.Unobtrusive.Ajax并引用

2)OnSuccess = "MySuccessMethod()"应该是OnSuccess = "MySuccessMethod"(其中MySuccessMethodJavaScript方法,而不是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