无法使用Header变量值传递查询字符串

时间:2014-01-29 02:30:22

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

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

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

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");
        }

1 个答案:

答案 0 :(得分:1)

改为使用会话,

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

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

通过这种方式,您可以随时随地访问它,而且有人无法手动更改查询字符串以模仿其他用户。

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

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

根据您的代码示例进行编辑,了解我如何设置&#34; UserName&#34; session var并稍后检索它:

 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");
            }
        }