2010-11-25 5 views
2

Salut tout le monde. Vous avez une coutume sur la façon de le faire en tant qu'im nouveau à MVC et en essayant d'obtenir quelques petites choses mises en œuvre. C'est ainsi que je l'ai fait dans WebForms mais je veux le faire passer à MVC.Contrôle des messages dans Masterpage avec ASP.NET MVC

J'ai un contrôle utilisateur qui contient CSS qui rendra un message. Ce contrôle est situé dans le MasterPage et appelé à partir d'une page ASPX comme ceci:

Code Pseudo:

try{ 
    Msg.MessageMode = WebPageMessageMode.OK; 
    Msg.ShowOK("Report deleted."); 
} 
catch 
{ 
Msg.MessageMode = WebPageMessageMode.ErrorMessage; 
Msg.ShowError("There was a problem deleting the report."); 
} 

Masterpage.aspx 
<cc1:WebPageMessage runat="server" ID="msg" /> 

J'ai actuellement le contrôle dans le MasterPage et maintenant je suis un peu confus au sujet de passer d'ici.

Devrais-je mettre l'objet 'Msg' ci-dessus du pseudo code dans une vue de la MasterPage?

Quelle est la bonne façon de faire quelque chose comme?

Répondre

0

Dans un contrôleur, dans le cadre de l'action, vous pouvez définir un message comme celui-ci:

public ActionResult MyAction() 
{ 
    // Do some stuff 

    TempData["message"] = "This is a message."; 
    return View("MyView"); 
} 

Dans votre page principale ou dans votre vue:

<% 
    string text = TempData["Message"] as string;  
    Response.Write(text); 
%> 
3

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!

+0

Cest grand truc Lorenzo! Votre message m'a donné quelques idées auxquelles je n'avais pas pensé auparavant. – Todd

+1

Heureux que ça a aidé! Veuillez marquer la question comme si vous vous sentez satisfait! – Lorenzo

0

Lire this blog post sur la façon d'ajouter un message dans asp.net mvc dans le style rails:

Questions connexes