【问题标题】:Returning JavaScriptResult in mvc problem with model validation在模型验证的 mvc 问题中返回 JavaScriptResult
【发布时间】:2011-03-03 07:51:36
【问题描述】:

我有一个 JavaScriptResult 的 post 方法的返回类型。我想通过返回new JavaScriptResult(){} 对此方法进行模型验证。我怎样才能做到这一点?如果存在模型级别错误,我应该返回什么。

【问题讨论】:

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


    【解决方案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");
    }
    

    【讨论】:

    • 如果我通过说 addmodel errors 在控制器中添加了模型级错误,那么我必须将模型返回到视图并显示模型错误。我们可以通过返回类型 javascriptresult 来做到这一点吗?提前致谢。
    • @NetDev - 否,因为 JavScriptResult 的唯一方法是 protected internal virtual JavaScriptResult JavaScript(string script);,它不将模型作为参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    相关资源
    最近更新 更多