Was ist der empfohlene Ansatz zum Bereitstellen von Benutzerbenachrichtigungen / -bestätigungen in MVC?

Ein häufiges Szenario ist das Versenden von Benachrichtigungen / Bestätigungen an Benutzer, nachdem diese eine Aktion ausgeführt haben, um sie über den Erfolg zu informieren.

Angenommen, ein Benutzer gibt Feedback in einem Feedback-Formular und klickt dann aufRückmeldung senden. Möglicherweise möchten Sie die Meldung "Vielen Dank für Ihr Feedback" anzeigen.nac Sie haben eine Validierung durchgeführt, z. Sie haben eine gültige E-Mail in der Datenbank. Irgendein Pseudocode:

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

Ich verstehe, wie man Einträge mit @ validieHtml.ValidationMessage usw. Dies ist in Ordnung, und ich überprüfe in der Regel, ob ungültige Einträge vorliegen, entweder mit jQuery auf der Clientseite oder zu Beginn meiner Aktion (d. h. bevor ich die Datenbank betrete), und beende meine Aktion, wenn ungültige Einträge vorhanden sind.

Was ist jedoch mit dem Szenario, in dem alle Einträge gültig sind und Sie eine Bestätigungsmeldung anzeigen möchten?

Option : Haben Sie eine völlig separate Ansicht

Dies scheint gegen die DRY-Prinzipien zu verstoßen, da eine völlig neue Ansicht (und ViewModel) nahezu identische Informationen anzeigt, was für die Benutzerbenachrichtigung zu erwarten ist.

Option : Bedingte Logik in der Ansicht

In diesem Szenario könnte die Ansicht eine bedingte Anweisung enthalten, die prüft, ob TempData vorhanden sind, die in @ übergeben werdeSubmitFeedback Aktion. Wieder Pseudocode:

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

Option 3: Verwenden Sie jQuery, um beim Laden der Seite nach TempData zu suchen.

In diesem Szenario hätte ich ein verstecktes Feld, das ich mit TempData über das @ füllen würSubmitFeedback Aktion. Ich würde dann jQuery verwenden, um den versteckten Feldwert zu überprüfen. Mehr Pseudocode:

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

Meine ersten Gedanken dazu sind:

Option 1 Vollständige Trennung der Ansichten, scheint aber übertrieben und ineffizient zu sein (verletzt DRY)Option 2 Einfach genug, aber mit Bedingungslogik in der Ansicht (werde ich dafür nicht am MVC-Altar geopfert?!?)Option 3: Fühlt sich an wie es ist, Dinge zu komplizieren. Es vermeidet jedoch Logik in View.

Was sagst du? Option 1,2,3 oder keine? Gibt es einen besseren Weg?

Bitte erweitern Sie meine Codierungsmuster!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage