【问题标题】:How to pass a parameter in a querystring to multiple pages?如何将查询字符串中的参数传递给多个页面?
【发布时间】:2015-07-15 10:37:59
【问题描述】:

我想动态更改我的网站(由多个页面组成)主题。我将查询字符串中的参数作为“主题”传递给所有解决方案。 它仅适用于使用查询字符串重定向的一个页面(主题更改正确),但其他 Web 表单的主题不会更改。

那么如何将查询字符串中的参数传递给多个页面?

下面的代码是一个事件,当用户单击按钮时,将他重定向到其他页面并更改坐的主题。

protected void btn_blue_gray_Click(object sender, EventArgs e)
        {
            String bl = "blue";
            Response.Redirect("page1.aspx?theme=" + bl);
        }

如果有帮助:它是 asp.net 4.5,我们使用 Microsoft.AspNet.Identity 包登录用户。

【问题讨论】:

  • 这个问题不清楚。 其他网络表单无法识别?什么意思?

标签: c# asp.net .net-4.5 query-string asp.net-identity


【解决方案1】:

当您导航到其他页面时,您会丢失传入的查询字符串,除非您自己将其添加到其他页面的路由/链接中。

当您将参数传递给您的页面时(假设您已登录,您可以在那里执行)将主题选择存储在一些状态(cookie 或 session 或 MemoryCache 或其他东西),然后只需在每个页面上查找此值(或将其粘贴到 MasterPage 或 baseView 中,默认为您的标准主题值。

类似

return Session["theme"] ?? "default";

然后,从该 MasterPage 或 View 派生的每个页面都可以访问主题值(无论您在哪里设置)。

如果您想允许用户更改值,请在单击按钮后设置它,然后导航或刷新页面,新的主题值将自动获取。

【讨论】:

  • 我用Session替换了查询字符串,但是过了一会儿,当我重新加载页面时,它的主题转换为默认主题!!!
  • 您是如何刷新(通过导航)或重新加载浏览器的? - 您是否将查询字符串值写入会话?
  • 通过在页面之间导航(我认为)。我有一些页面的链接,当点击它们时,它们的网络表单会加载。而且我不会将查询字符串值写入会话。
  • 如果您不先将其写入会话,则无法将其读出;)
  • 我首先通过点击一个按钮来编写它。起初它有效并且所有页面的主题都发生了变化。但几分钟后,他们的主题变成了他们的默认主题!!!
【解决方案2】:

您需要在一个全局类中设置主题,所有 Web 表单都可以访问该类。

公共静态类主题 { 公共静态字符串主题=“”; }

【讨论】:

  • 如何在其他 webForm 代码中使用这个字符串(主题)?
  • 只需将其用作 Theme.theme = "whatever value you want"
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多