如何将简单参数从一个ASP.Net页面传输到另一个页面?

时间:2011-03-28 18:23:07

标签: asp.net

在我正在学习的课程中,他们教我如何使用Response.Redirect:

Response.Redirect(string.Format("name.aspx?sb="+bts+"&del="+delimiter));

有更好的方法吗?

6 个答案:

答案 0 :(得分:6)

具体而言,您正在讨论的是在页面之间传输状态的方法。这可以通过以下几种方式完成:

  1. 查询字符串参数。这相当于你在帖子中所做的事情。
  2. 会话。在这种情况下,您将在一个页面上填充Session变量,然后在另一个页面上检索它。
  3. 缓存数据。
  4. 如果您直接发布到相关网页,请填写表格变量。

答案 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)

有几种不同的方法可以跨多个页面发送信息。

  1. 查询字符串参数。 (就像你的例子)
  2. 会话变量
  3. 缓存
  4. 表单变量(发布到其他页面时)
  5. 这取决于你使用哪一个。

    查询字符串通常很简单,我在登录页面是唯一需要数据的东西时使用它们。

    会话要求您定义会话提供程序,并在进程内,进程外等方面做出一些决定。此外,这将保留数据,直到会话过期或您明确清除它。

    Cookie很好,请记住客户可以查看所有Cookie。

    交叉表单发布的表单变量可能是最稀有的,并附带它自己的警告,以确保.net接受此。

答案 3 :(得分:0)

如果链接取决于您在页面加载时所知道的信息,而不是用户在回发期间输入的信息,我会预先生成链接。

MyHyperlink.NavigateUrl = "name.aspx?sb="+bts+"&del="+delimiter;

这样客户端就不必往返于服务器以了解要重定向到的地址。

答案 4 :(得分:0)

正如@Thomas所提到的,有很多方法可以做你所要求的。

  1. 查询字符串参数:简单,如果可能的话应该使用。您可以打开多个选项卡/浏览器而不会相互影响。

  2. 会话。这看起来很简单,但是如果您有可能打开多个选项卡,那么它就会失败,因为您只有一个会话对象。我见过应用程序损坏的数据:打开选项卡,将对象加载到会话中。打开第二个选项卡,第二个对象替换会话中的第一个对象。返回第1个选项卡,进行更改,单击save:boom,第2个对象获取1st的属性。

  3. 我想不出用过这个的一个原因 - 会话的所有限制,没有任何好处。

  4. 表单变量:您可以发布到不同的页面,并且您可能希望使用此页面,但通常这会增加不需要的复杂性,尤其是在asp.net中 - viewstate等可能会导致问题。

答案 5 :(得分:0)

我正在添加另一个答案,因为这里的每个人都可能错过了你真正的问题。

如果真正的问题是:为查询字符串参数组装字符串的最佳方法是什么,那么你应该使用:

Response.Redirect(String.Format("name.aspx?sb={0}&del={1}", bts, delimiter));

这允许你自己构造字符串,格式方法将在定义的位置注入参数。