【问题标题】:What's the recommended way to report model state and application errors to client?向客户端报告模型状态和应用程序错误的推荐方法是什么?
【发布时间】:2011-07-07 11:59:56
【问题描述】:

我想知道向浏览器报告将向用户显示的应用程序或模型状态错误的最佳做法是什么。你能抛出一个异常并在jquery post的错误处理程序中处理它吗?例如,考虑这种方法:

[HandlerErrorWithAjaxFilter, HttpPost]
        public ActionResult RetrievePassword(string email)
        {
            User user = _userRepository.GetByEmail(email);

            if (user == null)
                throw new ClientException("The email you entered does not exist in our system.  Please enter the email address you used to sign up.");

            string randomString = SecurityHelper.GenerateRandomString();
            user.Password = SecurityHelper.GetMD5Bytes(randomString);
            _userRepository.Save();

            EmailHelper.SendPasswordByEmail(randomString);

            if (Request.IsAjaxRequest())
                return Json(new JsonAuth { Success = true, Message = "Your password was reset successfully. We've emailed you your new password.", ReturnUrl = "/Home/" });
            else
                return View();           
        }

这种情况下用户为空时抛出异常是否正确?或者我应该这样做并在 jquery 帖子的成功处理程序中处理它:

return Json(new JsonAuth { Success = false, Message = "The email you entered does not exist in our system.  Please enter the email address you used to sign up.", ReturnUrl = "/Home/" });

【问题讨论】:

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


    【解决方案1】:

    不要通过抛出异常来处理验证。如果您要发送 JSON 响应,请在 JSON 响应中包含客户端所需的所有内容:

    return Json(new JsonAuth { 
        Success = false, 
        Message = "The email you entered does not exist in our system.  Please enter the email address you used to sign up.", 
        ReturnUrl = "/Home/" 
    });
    

    如果您要返回视图,请添加模型状态错误,然后表单上的 HTML 助手将完成其余工作:

    ModelState.AddModelError("email", "The email you entered does not exist in our system.  Please enter the email address you used to sign up.");
    return View();
    

    【讨论】:

    • 谢谢。您是否认为我的方法可能是我在此处发布的问题的原因:stackoverflow.com/questions/5171369/…
    • @Prabhu,我看到了这个问题,但代码太多,我无法理解。我会从做一些简单的事情开始:没有插件和花哨的东西。一旦我得到这个工作,我会继续改进,直到我发现错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2019-05-23
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多