Ich glaube nicht, dass es Ein One-Lösung-passt für alle hier.
Wie auch immer das ist meine Lösung, die jQuery verwendet:
1) eine MyResultModel Klasse Erstellen Sie eine Nachricht an den Benutzer
public enum MyResultType { Info, Error }
public class MyResultModel
{
public MyResultModel(MyResultType type, string message) {
switch (type) {
case MyResultType.Info: Title = "OK"; break;
case MyResultType.Error: Title = "Error!!!"; break;
}
Message = message;
}
public String Title { get; set; }
public String Message { get; set; }
}
2) Erstellen Sie eine Teilansicht in dem Namen MyResult
zu handhaben Gemeinsam genutzte Ordner zu handhaben das Modell
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyResultModel>" %>
<div id="resultTitle"><%: Model.Title %></div>
<div id="resultMessage"><%: Model.Message %></div>
3) Erstellen und verwenden Sie einen BaseController für Ihre Controller und fügen Sie die folgende Methode hinzu. Das Verfahren einfach einen benutzerdefinierten HTTP-Header der Antwort hinzufügen
protected PartialViewResult PartialView(string viewName, object model, string resultHeader) {
Response.AppendHeader("MyHttpCustomHeader", resultHeader);
return base.PartialView(viewName, model);
}
4) In Ihrer Aktion eine MyResultView zurück, wenn Sie schließlich
[HttpPost]
public virtual ActionResult DoSomething() {
try {
//Do Something
return PartialView("MyResult",
new MyResultModel(MyResultType.Info, "Operation Completed"),
"HttpResultInfo");
}
catch (Exception ex) {
return PartialView("MyResult",
new MyResultModel(MyResultType.Error, ex.Message),
"HttpResultError");
}
}
5) getan haben, Senden Sie das Formular mit jquery und handle mit den Ergebnissen.
$.ajax({
type: "post",
dataType: "html",
url: "your/url/here",
data: $("#myform").serialize(),
success: function (response, status, xml) {
var resultType = xml.getResponseHeader("MyHttpCustomHeader");
if (resultType == null) {
//No message do whatever you need
}
else {
//response contain your HTML partial view here. Choose your
//desidered way to display it
}
}
});
Mit einem Szenario wie diesem müssen Sie kein Steuerelement auf der Masterseite platzieren.Sie können:
- Zeigen Sie die Ansicht, wie sie von der Aktion ohne Änderung
- Verwenden einig Phantasien Nachricht Display-Technik kommen wie Stackoverflow hat mit der orangefarbenen Schiebe Nachricht (in diesem Fall einfach den Titel extrahiert und die Nachricht aus die zurück html)
- einige ausgefallene jQuery-Plugin als jGrowl Verwenden Sie Ihre Nachricht
zu zeigen Wenn Sie, ob es überprüfen wollen, eine Info/Fehlermeldung den benutzerdefinierten Header mit jQuery in der else
Zweig einfach überprüfen
var title = $(response).filter("#resultTitle").text();
var message = $(response).filter("#resultMessage").text();
if (resultType == "HttpResultInfo") {
showInfoMessage(title, message);
}
else if (resultType == "HttpResultError") {
showErrorMessage(title, message);
}
Hoffe es hilft!
Das ist great stuff Lorenzo! Dein Beitrag hat mir einige Ideen gegeben, über die ich vorher noch nicht nachgedacht habe. – Todd
Froh, dass es geholfen hat! Bitte markieren Sie die Frage als beantwortet, wenn Sie das Gefühl haben, dass es getan ist! – Lorenzo