假设我们有一个带有以下语法的标准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。 谢谢。
答案 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库非常强大且经过跨平台测试。