我在网上搜索但是没有找到这个问题的真正好答案..
假设我在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?)
答案 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;