Каков рекомендуемый способ сообщить клиенту о состоянии модели и ошибках приложения? - PullRequest
3 голосов
/ 02 марта 2011

Мне интересно, как лучше всего сообщать браузеру об ошибках состояния приложения или модели, которые будут отображаться пользователю. Можете ли вы сгенерировать исключение и обработать его в обработчике ошибок поста jquery? Например, рассмотрим этот метод:

[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();           
        }

Правильно ли создавать исключение в этом случае, когда пользователь имеет значение null? Или я должен вместо этого сделать это и обработать это в обработчике успеха поста 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/" });

1 Ответ

5 голосов
/ 02 марта 2011

Не обрабатывать проверку, выдавая исключения. Если вы отправляете ответ 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...