1

假设我们有一个标准的 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。谢谢你。

4

1 回答 1

1

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

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

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

编辑:我没有意识到您正在使用 Ajax.BeginForm()。您仍然应该能够连接到 JSON 结果客户端以解析结果。请参阅如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?.

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

于 2012-11-01T19:39:03.427 回答