Каков рекомендуемый подход к предоставлению пользовательских уведомлений / подтверждений в MVC?

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

Например, предположим, что пользователь предоставляет отзыв в форме обратной связи, а затем нажимаетОтправить отзыв, Вы можете отобразить сообщение «Спасибо за отзыв».после Вы выполнили некоторую проверку, например, у них есть действующий адрес электронной почты в базе данных. Какой-то псевдокод:

public ActionResult SubmitFeedback(string Feedback, int UserID)
{
    MyDataContext db = new DataContext()

    if(db.usp_HasValidEmail(UserID)) //Check user has provided a valid email
        return View("Index"); //Return view and display confirmation
    else
        ModelState.AddModelError("InvalidEmail", "We do not hold an email record for you. Please add one below");
        return View("Index);
}

Я понимаю, как проверить записи с помощьюHtml.ValidationMessage и т. д. Это нормально, и я обычно проверяю наличие недопустимых записей либо с помощью jQuery на стороне клиента, либо в начале своего действия (т. е. перед тем, как начать работу с базой данных) и завершаю свое действие, если есть недопустимые записи.

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

Опция 1: Иметь совершенно отдельный вид

Похоже, что это нарушает принципы DRY, поскольку совершенно новый View (и ViewModel) отображают практически идентичную информацию, за исключением уведомления пользователя.

Вариант 2: Условная логика в представлении

В этом сценарии у меня может быть условный оператор в представлении, который проверяет наличие некоторых TempData, которые передаются вSubmitFeedback Действие. Опять же, псевдокод:

   <% if(TempData["UserNotification"] != null {%>
   <div class="notification">Thanks for your Feedback&#33;</div>
   <% } %>

Вариант 3: Используйте jQuery для проверки TempData при загрузке страницы

В этом сценарии у меня будет скрытое поле, которое я буду заполнять с помощью TempData черезSubmitFeedback Действие. Затем я бы использовал jQuery для проверки значения скрытого поля. Еще псевдокод:

<%=Html.Hidden("HiddenField", TempData["UserNotification"])%> //in View

$(document).ready(function() {
    if ($("input[name='HiddenField']").length > 0)
        $('div.notification').show();
        setTimeout(function() { $('div.notification').fadeOut(); }, 3000);
});

Мои первые мысли по этому поводу:

Опция 1: Полное разделение видов, но кажется излишним и неэффективным (нарушает СУХОЙ)Вариант 2: Достаточно просто, но в View есть условная логика (разве я не принесен в жертву на алтаре MVC для этого?!?)Вариант 3: Чувствуется, что это усложняет вещи. Тем не менее, он избегает логики в View.

Что скажете вы? Вариант 1,2,3 или нет? Есть ли способ лучше?

Пожалуйста, дополните мои шаблоны кодирования!

Ответы на вопрос(2)

Ваш ответ на вопрос