使用模型验证返回mvc问题中的JavaScriptResult

时间:2011-03-03 07:51:36

标签: asp.net-mvc asp.net-mvc-2 validation

我有一个JavaScriptResult的post方法的返回类型。我想使用return new JavaScriptResult(){}对此方法进行模型验证。我怎样才能做到这一点?就像存在模型级别错误时应该返回的那样。

1 个答案:

答案 0 :(得分:1)

通常,我会尽量避免使用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");
}