在我的.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");
}
答案 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");
}
}