Je ne pense qu'il ya une solution unique pour tous ici.
Quoi qu'il en soit c'est ma solution qui utilise jQuery:
1) Créer une classe MyResultModel pour gérer un message à l'utilisateur
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) Création d'une vue partielle du nom MyResult
dans la Dossier partagé pour gérer le modèle
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyResultModel>" %>
<div id="resultTitle"><%: Model.Title %></div>
<div id="resultMessage"><%: Model.Message %></div>
3) Créez et utilisez un BaseController pour vos contrôleurs et ajoutez-y la méthode suivante. La méthode simplement ajouter une coutume Http tête à la réponse
protected PartialViewResult PartialView(string viewName, object model, string resultHeader) {
Response.AppendHeader("MyHttpCustomHeader", resultHeader);
return base.PartialView(viewName, model);
}
4) Dans votre action pour le retour d'un MyResultView quand vous avez fait
[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) Enfin, soumettez le formulaire en utilisant jquery et gérer les résultats. Avec un scénario comme celui-ci, vous n'avez pas besoin de placer un contrôle sur la page maître.Vous pouvez:
- Afficher la vue comme elle vient de l'action sans aucune modification
- Utilisez some technique d'affichage des messages de fantaisie comme StackOverflow fait avec le message coulissant orange (dans ce cas, il suffit d'extraire le titre et le message le code html retourné)
- Utilisez certains plugin jquery fantaisie comme jGrowl pour montrer votre message
Si vous voulez vérifier wether il est un message info/erreur simplement vérifier l'en-tête personnalisé avec jQuery dans la branche else
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);
}
Espérons que ça aide!
Cest grand truc Lorenzo! Votre message m'a donné quelques idées auxquelles je n'avais pas pensé auparavant. – Todd
Heureux que ça a aidé! Veuillez marquer la question comme si vous vous sentez satisfait! – Lorenzo