在我正在学习的课程中,他们教我如何使用Response.Redirect:
Response.Redirect(string.Format("name.aspx?sb="+bts+"&del="+delimiter));
有更好的方法吗?
答案 0 :(得分:6)
具体而言,您正在讨论的是在页面之间传输状态的方法。这可以通过以下几种方式完成:
答案 1 :(得分:3)
请参阅How to: Pass Values Between ASP.NET Web Pages。
此外,如果您正在执行Server.Transfer而不是Response.Redirect,您还可以使用HttpContext.Current.Items
集合来传递数据。
此外,代码段:
只是执行字符串连接,因此您不需要调用string.Format。
UrlEncode应该查询字符串参数
e.g。
Response.Redirect("name.aspx?sb=" + Server.UrlEncode(bts)
+ "&del=" + Server.UrlEncode(delimiter));
答案 2 :(得分:2)
有几种不同的方法可以跨多个页面发送信息。
这取决于你使用哪一个。
查询字符串通常很简单,我在登录页面是唯一需要数据的东西时使用它们。
会话要求您定义会话提供程序,并在进程内,进程外等方面做出一些决定。此外,这将保留数据,直到会话过期或您明确清除它。
Cookie很好,请记住客户可以查看所有Cookie。
交叉表单发布的表单变量可能是最稀有的,并附带它自己的警告,以确保.net接受此。
答案 3 :(得分:0)
如果链接取决于您在页面加载时所知道的信息,而不是用户在回发期间输入的信息,我会预先生成链接。
MyHyperlink.NavigateUrl = "name.aspx?sb="+bts+"&del="+delimiter;
这样客户端就不必往返于服务器以了解要重定向到的地址。
答案 4 :(得分:0)
正如@Thomas所提到的,有很多方法可以做你所要求的。
查询字符串参数:简单,如果可能的话应该使用。您可以打开多个选项卡/浏览器而不会相互影响。
会话。这看起来很简单,但是如果您有可能打开多个选项卡,那么它就会失败,因为您只有一个会话对象。我见过应用程序损坏的数据:打开选项卡,将对象加载到会话中。打开第二个选项卡,第二个对象替换会话中的第一个对象。返回第1个选项卡,进行更改,单击save:boom,第2个对象获取1st的属性。
我想不出用过这个的一个原因 - 会话的所有限制,没有任何好处。
表单变量:您可以发布到不同的页面,并且您可能希望使用此页面,但通常这会增加不需要的复杂性,尤其是在asp.net中 - viewstate等可能会导致问题。
答案 5 :(得分:0)
我正在添加另一个答案,因为这里的每个人都可能错过了你真正的问题。
如果真正的问题是:为查询字符串参数组装字符串的最佳方法是什么,那么你应该使用:
Response.Redirect(String.Format("name.aspx?sb={0}&del={1}", bts, delimiter));
这允许你自己构造字符串,格式方法将在定义的位置注入参数。