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

Когда пользователь нажимает кнопку отправки в форме, я хочу вернуть пользователю сообщение об успехе / неудаче, и мне интересно, как лучше всего отправить сообщение обратно пользователю.

Например, в форме входа в систему, если пользователь вводит неправильный пароль, я бы хотел, чтобы представление перезагрузилось с сообщением о том, что вход не выполнен.Или в форме обновления исходное представление, которое у них было, появилось бы с сообщением о том, что обновление прошло успешно.

Моя идея состоит в том, чтобы иметь несколько частичных представлений или помощников HTML, которые ищут свойство ViewBag, такое как «ErrorMessage» или«SuccessMessage» и условно показывают себя, когда эти свойства имеют значение.Эти компоненты могут быть добавлены в _Layout или вручную в каждую форму, где они требуются.

Редактировать

С тех пор я обнаружил, что ValidationSummary Метод принимает параметр того, следует ли исключать ошибки свойств, что означает, что вы можете использовать его, чтобы показать, когда вход / регистрация не удалась.Но, похоже, есть ошибка, из-за которой сводка проверки все еще генерируется, даже если ошибок нет.

Ответы [ 2 ]

7 голосов
/ 03 марта 2011

Это хороший вопрос, который я недавно пытался решить в новом приложении MVC. Для меня ModelState.AddModelError подходит для ошибок, но не работает при сообщении таких вещей, как сообщения об успехе или предупреждения.

Вот подход, который я решил использовать недавно, и я приветствую любые отзывы о нем:

  1. Я создал класс с именем Уведомление и перечисление с именем NotificationType . NotificationType имеет 4 значения: Успех , Ошибка , Предупреждение , & Информация . Уведомление имеет свойства «Сообщение» и «Тип».

  2. У меня есть статический класс с именем NotificationManager , который содержит экземпляры объектов Notification для жизни HttpRequest (с использованием объекта Session пользователя). Идея состоит в том, что любой контроллер может добавить любое количество объектов Notification во время выполнения действия в зависимости от того, что ему нужно «сообщить» пользователю.

  3. У меня есть собственный HtmlHelper, который я вызываю один раз на главной странице (то есть Html.NotificationSummaryFor ()), который принимает IEnumerable of Notifications (то есть NotificationManager.Notifications) и отображает UL с дочерними LI для каждого уведомления. Затем я использую CSS-классы для стилизации этих LI уведомлений на основе «NotificationType» (красный для ошибки, желтый для предупреждения, зеленый для успеха и т. Д.). HtmlHelper также отвечает за очистку уведомлений от менеджера после их рендеринга в представление.

Эта реализация довольно проста и имеет ограничения, но в целом я нахожу, что наличие такой структуры гарантирует, что команда разработчиков, работающих над одним и тем же приложением, сможет предоставлять уведомления согласованным образом, что важно для удобства использования и удобства обслуживания .

1 голос
/ 02 марта 2011

asp-net-mvc-2-model-validation Это действительно простой способ настроить проверку.Кроме того, если вы делаете такие вещи, как вход в систему, вы можете сделать что-то вроде этого, где вы добавляете modelError в состояние модели, а затем проверяете это в своем коде

 if (ModelState.IsValid) {
            if (!FormsAuthentication.Authenticate(userName , password))
                ModelState.AddModelError("" , "Incorrect username or password");
        }

        if (ModelState.IsValid) {
            FormsAuthentication.SetAuthCookie(userName  , false);
            return Redirect(url ?? Url.Action("Index" , "Admin"));
        } else
            return View(); //goes right back to the log on screen 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...