如何将JavaScript错误从操作传递到我的视图?

时间:2009-06-29 13:27:22

标签: c# javascript jquery asp.net-mvc error-handling

我有2个动作,一个用于GET,另一个用于处理POST请求。

虽然我在客户端进行了验证,但我也在服务器端检查了一些内容(在我的操作方法中)。

在POST操作中,当我发现要报告回UI的错误等时,我有什么选择将消息/错误发送回客户端?


注意:

我正在使用流行的jQuery验证插件als。

2 个答案:

答案 0 :(得分:1)

我正在使用从View到Post Action的模型绑定,它内置了可用于此的验证。

但有些人更喜欢在模型之外进行验证。要将这些错误返回给View,您需要更新ModelState,然后正常检查它是否有效(包含错误):

    public Dictionary<string, string> ValidateEntry(Object obj)
    {
        var errors = new Dictionary<string, string>();

        if (string.IsNullOrEmpty(obj.Owner))
        {
            errors.Add("Owner", "You must select Owned By.");
        }
        //... whatever else
        return errors;
    }

     [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(Object cap)
    {
       var errors = ValidateEntry(cap);
        if (errors.Count > 0)
        {
            foreach (var err in errors)
            {
                ModelState.AddModelError(err.Key, err.Value);
            }
        }
        if (ModelState.IsValid)
        {
           //... do if valid
        }
        return View(ViewModel);
    }

答案 1 :(得分:1)

我在Web应用程序/网站中实施验证时遇到的一些规则:

  • 验证应该发生在客户端和服务器端
  • 服务器端验证应该镜像关闭脚本的用户的客户端验证
  • 即使验证规则在两个地方强制执行,逻辑也不应重复

遵循这些规则我使用以下解决方案:

  • xVal(来自ScottGu的博客)
  • 来自亚当的
  • IDataError solution 宝源
  • 业务规则在具有DataAnnotations的模型中实施
  • 该服务可能会针对唯一的业务约束抛出自定义异常

令人惊讶的是它的易用性和使用效果。它透明地使用JQuery验证插件,并以最少的编码完成它应该做的事情。

您视图中的客户端验证包括:

<%= Html.ClientSideValidation<Foo>() %>

您的操作中的服务器端验证包含

ModelState.IsValid