【问题标题】:Unable to pass query string with Header variable value无法使用 Header 变量值传递查询字符串
【发布时间】:2014-01-29 02:30:22
【问题描述】:

在我的 .net 应用程序中,我在导航栏中创建了一个标签,该标签从服务器调用 header 变量作为用户名。这工作正常,但是当我尝试将该变量传递给我的其他页面时它不起作用。

我认为最好的选择是使用查询字符串而不是会话变量。所以这是我的代码(免责声明:第一次使用查询字符串,所以不确定它是否正确使用)

aspx - 带有用户名的主页:

<asp:Label runat="server" ID="Username" Text="User"></asp:Label>

cs - 主页:

Username.Text = Request.Headers["displayname"];
Response.Redirect("About.aspx?Parameter=" + Username.Text);

aspx - 关于页面需求/用户名:

<asp:Label runat="server" ID="Username" Text="User"></asp:Label>

cs - 关于页面:

Username.Text = Request.QueryString["Parameter"].ToString();

我知道其中一些可能是错误的,因此任何有关执行此操作的最佳方法或我做错了什么的建议都将真正帮助我解决此问题。

编辑 - 从两个页面添加我的 cs

主要:

   protected void Page_Load(object sender, EventArgs e)
        {
            Username.Text = Request.Headers["displayname"];
            DateUpdated.Text = DateTime.Now.ToString("M/dd/yy");
            Session["name"] = "Username.Text";
        }

关于:

protected void Page_Load(object sender, EventArgs e)
        {            
            Username.Text = (string) (Session["Username"]);
            DateUpdated.Text = DateTime.Now.ToString("M/dd/yy");
        }

【问题讨论】:

  • 我会考虑将用户名保存为会话变量而不是 q 字符串
  • 更改您的会话["UserName"] = "UserName";到 Session["UserName"] = UserName.Text;我使用“用户名”作为占位符。虽然,您这样做的方式应该将“用户名”(文字字符串)设置为您的标签。
  • 您可能还希望将两个代码块放在 if (!IsPostBack) 块中,以确保它们只触发一次(当页面最初加载时,而不是在任何后续回发中)-@987654321 @
  • 我越看这个越糊涂。你为什么使用标题变量?为什么不在用户登录时设置 UserName 会话变量?
  • 抱歉,您的问题让我有些困惑,但我必须调用 header 变量才能从服务器获取它(所以有人告诉我)我不知道有任何其他方式可以显示它跨度>

标签: c# html asp.net query-string


【解决方案1】:

改用会话,

保存到会话:Session["UserName"] = "MyUserName" (wherever you're getting it)
您可能希望在用户登录的任何地方执行此操作。

检索/将其设置为您的标签:Username.Text = (string)(Session["UserName"]);

这样您就可以在任何需要的地方访问它,而其他人不能简单地手动更改查询字符串来冒充另一个用户。

要使用会话,您必须使用 web.config 中的会话状态节点启用它,进程内模式可能最适合您的需求。将以下节点放在 web.config 的 &lt;system.web&gt; 节点中:

<sessionstate 
      mode="inproc"
      cookieless="false" 
      timeout="20" 
/>

根据您的代码示例进行编辑,看看我如何设置“用户名”会话变量并稍后检索它:

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) {
               Username.Text = Request.Headers["displayname"];
               DateUpdated.Text = DateTime.Now.ToString("M/dd/yy");
               Session["Username"] = Request.Headers["displayname"];
            }
        }

protected void Page_Load(object sender, EventArgs e)
        {     
            if (!IsPostBack) {
               Username.Text = (string) (Session["Username"]);
               DateUpdated.Text = DateTime.Now.ToString("M/dd/yy");
            }
        }

【讨论】:

  • 感谢您的回复,但我的变量仍未传递到我的下一页。
  • 查看我关于在 Web 配置中允许会话状态的编辑。如果已设置但仍无法正常工作,您确定要将该值添加到会话对象吗?如果它被添加到会话中,它应该在该用户的应用程序中的任何位置都可用。
  • 得到sessionstate是system.web中无效元素的错误
  • 没关系 - 老实说,我什至不确定它是否必须在那里才能使用会话变量,但我总是添加它。确保您没有在页面顶部的 指令中使用 EnableSessionState="false" 覆盖会话
  • 如果您确定将其正确添加到会话中,您将在“关于”页面的页面循环中的哪个位置将其设置为 UserName.Text?在 Page_Load 的 (!IsPostBack) 部分中?如果您从主页和关于页面(代码隐藏)复制/粘贴整个代码块可能会更容易
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 2017-11-15
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多