如何将JSON Action方法中的错误或通知返回给Ajax表单?

时间:2012-11-01 19:02:37

标签: asp.net ajax asp.net-mvc json

假设我们有一个带有以下语法的标准Ajax表单:

  @using(Ajax.BeginForm("AddCityJson", "City",new AjaxOptions
        {
            HttpMethod = "post",
            OnSuccess = "JScriptOnSuccess();",
            OnFailure = "JScriptOnFailure"
        }))
    {
     ...form fields go here...   
     }

一个简单的表单,收集有关城市的一些信息,提交并保存。

在控制器端,我们收到信息。如果一切顺利,我们返回true,以便触发OnSuccess AjaxOption,如果失败,则返回false:

public JsonResult AddCityJson(Formcollection collection)
{
 var city = new City
 {
  ...populate city fields from passed in collection
 }
 var cityRepository = new CityRepository;
 city = cityRepository.SaveOrEdit(city);

 if(city==null)
 {return Json(false)} 

 return Json(true);

}

在控制器AddCityJson方法内部,我需要添加各种检查。可能要检查城市名称是否已存在或任何其他验证,如果我遇到错误或警告,请将其返回给UI。

如果我的Ajax表单期望返回ajax为true或false以及该帖子是否成功,我如何将任何错误/警告消息传递给UI?

我想避免使用ViewData,ViewBags。 谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在JSON结果中返回任意数量的值,例如:

return Json(new { success = false, message = errorMessage });

然后在客户端解释这个。无需使用ViewData,ViewBags等。只需在客户端格式化结果,因此您只需通过JSON传输数据。

编辑: 我没有意识到你使用的是Ajax.BeginForm()。您仍应该能够挂钩到JSON结果客户端来解析结果。请参阅How to use Ajax.BeginForm MVC helper with JSON result?

虽然我怀疑大多数人都会使用jQuery来完成同样的事情,比如Darin在Using Ajax.BeginForm with ASP.NET MVC 3 Razor的回复等各种StackOverflow帖子所描述的。这也是我推荐的,因为jQuery库非常强大且经过跨平台测试。