【发布时间】:2011-03-03 07:51:36
【问题描述】:
我有一个 JavaScriptResult 的 post 方法的返回类型。我想通过返回new JavaScriptResult(){} 对此方法进行模型验证。我怎样才能做到这一点?如果存在模型级别错误,我应该返回什么。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-2 validation
我有一个 JavaScriptResult 的 post 方法的返回类型。我想通过返回new JavaScriptResult(){} 对此方法进行模型验证。我怎样才能做到这一点?如果存在模型级别错误,我应该返回什么。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-2 validation
一般来说,我会尽量避免使用JavaScriptResult,因为它倾向于将 UI 内容与控制器内容混合在一起,这往往与整个 MVC 模式背道而驰。如果我正在做你想要完成的事情,我会将JsonResult 返回给客户端,然后根据结果执行一段代码。这样,如果模型验证失败,您可以返回带有失败结果的JsonResult,并在客户端上知道验证失败。可以这样实现:
[HttpPost]
public JsonResult Example(ModelName model)
{
// Validate
if (!ModelState.IsValid)
{
return new JsonResult()
{
Data = new { success = false },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
// No validation errors, do stuff
return new JsonResult()
{
Data = new { success = true },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
然后是客户端代码:
$.post('/Example', $('#form').serialize(), function (response) {
if (response.success) {
// Success, execute js code here
} else {
// Validation errors
}
}, "json");
但是,如果您需要使用 JavaScriptResult 路由并且发生验证错误,我将不返回任何内容或一些 javascript 会通知用户验证失败:
[HttpPost]
public JavaScriptResult Example(ModelName model)
{
// Validate
if (!ModelState.IsValid)
{
return new JavaScript("alert("Validation Failed!")");
}
// No validation errors, do stuff
return new JavaScript("js to return here if validation passes");
}
【讨论】:
JavScriptResult 的唯一方法是 protected internal virtual JavaScriptResult JavaScript(string script);,它不将模型作为参数。