ASP.NET:在成功将数据保存到数据库后,在另一页上显示通知

时间:2010-12-02 23:32:38

标签: asp.net forms notifications

我在网上搜索但是没有找到这个问题的真正好答案..

假设我在AddToList.aspx上有一个表单,我希望在您点击发送后,它会将您引导回List.aspx,并在消息框div中显示消息“项目已添加到列表”

我需要发送List.aspx吗?msg =我的消息,还是有另一种好办法呢?

编辑:

所以我做了这个帮助类:

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

并收到此错误:

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?)

4 个答案:

答案 0 :(得分:1)

您需要转换为字符串。会话参数存储为对象。

将其实现为扩展方法也可能是有用的。这样,它将适用于所有页面类型(主和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 "";
        }
    }

答案 1 :(得分:0)

我相信你可以通过设置用于将数据保存到“List.aspx”的按钮的PostBackUrl来实现。也许在AddToList.aspx上将变量设置为true / false,然后从List.aspx访问它?

不确定它是否更好,但它是一种选择。

答案 2 :(得分:0)

您当然可以使用查询字符串将数据传递到List.aspx页面,但要小心传递您计划在HTML中写出的文本 - 您需要防止XSS攻击。

还有其他几种方法可以做到这一点。有可能,您将在应用程序中有多个位置,您希望将用户重定向到另一个页面,但还会显示一条消息,该消息与他们在上一页上所执行的操作有关(保存一个项目,删除一个项目等)。为这个特定的实例提出更多的全球计划而不仅仅是一次性更好。

一个想法是使用Session存储消息,然后进行重定向。

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

然后,在您的页面上(或者可能是主页面),您检查Session("Message"),如果它有某些内容,则向用户显示该消息,然后清除该变量。

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

如果您使用此方法,我建议您编写一个帮助程序类,并使用它来管理您的消息:

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

MessageHelper.GetMessage()

将是您需要的方法。

答案 3 :(得分:0)

我无法发表评论,或者我会在您的帖子中发表评论。您需要像这样转换会话变量:(string)Session [“Message”]。所以,代码看起来像这样:

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

实际上有一种更好的方法来编写该类:将它作为一个属性而不是两个方法。它看起来像这样:(我也修复了你的逻辑; GetMessage总是返回空白)

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"];
        }
    }
}

在您的两个相应文件中,您可以这样设置并获取它:

//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;