Qual é a abordagem recomendada para fornecer notificações / confirmações de usuários no MVC?

Um cenário comum que encontro é fornecer notificações / confirmações aos usuários após a execução de uma ação para informá-los sobre o sucesso.

Por exemplo, suponha que um usuário forneça feedback em um formulário de feedback e clique emEnviar Comentários. Você pode exibir uma mensagem de "Obrigado pelo seu feedback"depois de você realizou alguma validação, por exemplo eles têm um email válido no banco de dados. Algum pseudocódigo:

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

Entendo como validar entradas usandoHtml.ValidationMessage etc. Isso é bom e normalmente verifico entradas inválidas usando o jQuery no lado do cliente ou no início da minha ação (ou seja, antes de começar a acessar o banco de dados) e saio da minha ação se houver entradas inválidas.

No entanto, e o cenário em que todas as entradas são válidas e você deseja exibir uma mensagem de confirmação?

Opção 1: Tenha uma visão totalmente separada

Isso parece violar os princípios DRY ao ter uma View (e ViewModel) inteiramente nova para exibir informações quase idênticas, esperadas pela notificação do usuário.

opção 2: Lógica condicional na exibição

Nesse cenário, eu poderia ter uma instrução condicional na exibição que verifica a presença de alguns TempData que são passados noSubmitFeedback Açao. Novamente, pseudocódigo:

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

Opção 3: Use o jQuery para verificar TempData no carregamento da página

Nesse cenário, eu teria um campo oculto que preencheria com TempData por meio doSubmitFeedback Açao. Eu usaria o jQuery para verificar o valor do campo oculto. Mais pseudocódigo:

<%=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);
});

Meus pensamentos iniciais sobre isso são:

Opção 1: Separação completa de Views, mas parece exagero e ineficiente (viola DRY)Opção 2: Simples o suficiente, mas tem lógica condicional na View (não sou sacrificado no altar do MVC por isso?!?)Opção 3: Parece que é complicar demais as coisas. Porém, evita a lógica no modo de exibição.

O que diz você? Opção 1,2,3 ou nenhuma? Existe uma maneira melhor?

Aumente meus padrões de codificação!

questionAnswers(2)

yourAnswerToTheQuestion