2010-12-02 4 views
1

je cherché sur le web, mais ne l'ai pas trouvé une vraie bonne réponse à cette question ..ASP.NET: afficher une notification sur une autre page, après que les données enregistrées dans la base de données avec succès

Disons que je forme, sur AddToList .aspx, et je veux que, après avoir frappé envoyer, il vous redirigera vers List.aspx, avec un message "L'élément a été ajouté à la liste" dans une boîte de message div.

Dois-je envoyer List.aspx? Msg = mon message, ou y a-t-il un autre moyen de le faire?

EDIT:

donc je fait cette classe d'aide:

public class MessageHelper : System.Web.UI.MasterPage 
    { 
     public void SetMessage(String message) 
     { 
      Session["Message"] = message; 
     } 

     public string GetMessage() 
     { 
      if (String.IsNullOrEmpty(Session["Message"])) 
      { 
       String temp = Session["Message"]; 
       Session["Message"] = ""; 
       return temp; 
      } 
      else 
      { 
       return ""; 
      } 
     } 
    } 

et a obtenu cette erreur:

Error 32 The best overloaded method match for 'string.IsNullOrEmpty(string)' has some invalid arguments 
Error 33 Argument '1': cannot convert from 'object' to 'string' 
Error 34 Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?) 
+0

NATTO - essayer ne pas changer votre question si drastiquement la prochaine fois. Vous avez complètement changé de sens, ce qui a eu pour conséquence que les réponses ne sont pas pertinentes pour la question nouvellement éditée. Vous devriez avoir ouvert une autre question pour votre erreur de casting. Merci! –

Répondre

0

Vous pouvez certainement utiliser la chaîne de requête pour transmettre des données à votre page List.aspx, mais soyez prudent en transmettant le texte que vous prévoyez d'écrire dans le code HTML - vous devrez protéger contre les attaques XSS.

Il y a plusieurs autres façons de procéder. Les chances sont, vous allez avoir plusieurs endroits dans votre application où vous voulez rediriger l'utilisateur vers une autre page, mais aussi afficher un message qui a quelque chose à voir avec ce qu'ils ont fait sur la page précédente (enregistré un élément, supprimé un article, etc.). Il serait préférable de proposer plus d'un système global pour cela plutôt que d'un seul pour ce cas particulier.

Une idée consiste à utiliser la session pour stocker un message, puis effectuez votre redirection.

Session("Message") = "Item was added to list." 
Response.Redirect("List.aspx") 

Ensuite, sur vos pages (ou une page maître, peut-être), vous vérifiez Session("Message") et si elle a quelque chose, vous montrer ce message à l'utilisateur, alors clair que variable.

If Session("Message") IsNot Nothing Then 
    Response.Write(CType(Session("Message"), String)) 'or set a label text, or show a pop up div, or whatever' 
    Session("Message") = Nothing 
End If 

Si vous utilisez cette approche, je vous recommande d'écrire une classe d'aide, et juste l'utiliser pour gérer votre messagerie:

MessageHelper.SetMessage("Item added to list.") 

et

MessageHelper.GetMessage() 

seraient les méthodes que vous aurait besoin.

+0

Ok merci! mais j'ai eu une erreur voir ce que j'ai édité. – natiz

+0

OK, j'ai modifié - vérifiez simplement Nothing au lieu d'utiliser String.IsNullOrEmpty(). –

0

Je crois que vous pouvez le faire en réglant le PostBackUrl du bouton utilisé pour enregistrer les données dans "List.aspx". Peut-être définir une variable à true/false sur AddToList.aspx, puis y accéder à partir de List.aspx?

Vous ne savez pas si c'est mieux, mais c'est une option.

1

Vous devez convertir en chaîne. Les paramètres de session sont stockés en tant qu'objets.

Il peut également être utile de l'implémenter comme méthode d'extension. De cette façon, il sera disponible sur tous les types de pages (Master et UI)

public static class MessageHelper 
    { 
     public static void SetMessage(this Page page, String message) 
     { 
      Session["Message"] = message; 
     } 

     public static string GetMessage(this Page page) 
     { 
      var messageText = Session["Message"] as string; 
      if (!String.IsNullOrEmpty(messageText)) 
      { 
       Session["Message"] = ""; 
       return messageText; 
      } 
      return ""; 
     } 
    } 
+0

Je pense qu'il vous manque un! - devrait être "if (! String.IsNullOrEmpty (messageText))" –

+0

Vous avez raison. Merci pour la prise. Je vais l'éditer. – AdamSane

0

Je ne peux pas encore de commentaire ou j'aurais simplement commenté ceci à votre poste. Vous devez transtyper votre variable de session comme suit: (chaîne) Session ["Message"].Donc, le code ressemblerait à ceci:

public class MessageHelper : System.Web.UI.MasterPage 
{ 
    public void SetMessage(String message) 
    { 
     Session["Message"] = message; 
    } 

    public string GetMessage() 
    { 
     if (String.IsNullOrEmpty((string)Session["Message"])) 
     { 
      String temp = (string)Session["Message"]; 
      Session["Message"] = ""; 
      return temp; 
     } 
     else 
     { 
      return ""; 
     } 
    } 
} 

En fait, il y a une meilleure façon d'écrire cette classe: faire une propriété au lieu de deux méthodes. Il ressemblerait à ceci: (j'ai aussi fixé votre logique, GetMessage a toujours été de retour en blanc)

public class MessageHelper : System.Web.UI.MasterPage 
{ 
    public MessageHelper() 
    { 

    } 

    public string Message 
    { 
     set { Session["Message"] = value; } 
     get 
     { 
      if (String.IsNullOrEmpty((string)Session["Message"])) 
      { 
       Session["Message"] = ""; 
      } 
      return (string)Session["Message"]; 
     } 
    } 
} 

Dans vos deux fichiers respectifs, vous devez définir et obtenir comme ceci:

//in AddToList.aspx 
MessageHelper msg = new MessageHelper(); 
msg.Message = "The Item was added to your list."; 

//and in List.aspx, assigned to an arbitrary Label named myMessageLabel 
MessageHelper msg = new MessageHelper(); 
myMessageLabel.Text = msg.Message; 
+0

mais si vous définissez Session ["Message"] = ""; et après la session de retour ["Message"], ne sera-t-il pas vide pour de bon? – natiz

+0

non, paramètre Session ["Message"] = ""; est dans l'instruction "if (String.IsNullOrEmpty ((string) Session [" Message "])" Rappelez-vous, contrairement à VB, C# a la ponctuation! Donc, tout ce qui est entre "{" et "}" est ce qui est fait si – Patches

+0

En outre, vous pouvez trouver ceci utile C'est un cheatsheet de VB.net à C#: http://aspalliance.com/625 – Patches

Questions connexes