简体   繁体   English

在主页上显示已登录的用户名

[英]Display Logged In Username on master page

I have MRS.master with the following: 我有以下MRS.master:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MRS.master.cs" Inherits="MRS" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">

        <div id="top2" class="top2">
            <a href="Page1.aspx" class="mainlist">Page1</a>
            <a href="Page2.aspx" class="mainlist" ></a>
        </div>
        <div id="top3" class="top3">
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager> 
            <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
            <ContentTemplate>
                <asp:Button ID="Register" runat="server" Text="Register" OnClick="Register_Click"/>
                <asp:Label ID="uname" Text="UserName" runat="server" CssClass="label"></asp:Label>
                <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
                <asp:Label ID="Pwd" Text="Password" CssClass="label" runat="server"></asp:Label>
                <asp:TextBox ID="password" runat="server" textmode="Password"></asp:TextBox>
                <asp:Button ID="Login" runat="server" Text="Login" OnClick="Login_Click" />
                  &nbsp;<asp:Label ID="Label3" Text="" runat="server" CssClass="label"/>
                &nbsp;&nbsp;&nbsp;
               <asp:Label ID="Label4" runat="server" Text="User" CssClass="label"></asp:Label>&nbsp;&nbsp;&nbsp;
              </ContentTemplate>
        </asp:UpdatePanel>
      </div>
<div id="down" class="down" style="color:wheat">
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

          </asp:ContentPlaceHolder>                             
        </div>

</form>
    </body>
    </html>

And MRS.master.cs: 和MRS.master.cs:

string username = null;
    protected void Page_Load(object sender, EventArgs e)
        {
          Label4.Text = (string)(Session["New"]);;
        }
    protected void Login_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection("Server=004-PC\\SQLEXPRESS;Database=MRS;User Id=sa;Password=***");
            con.Open();
            SqlCommand cmd1 = new SqlCommand("select count(*) from LoginDetails where Uname='" + UserName.Text + "'", con);
            int cnt = Convert.ToInt32(cmd1.ExecuteScalar().ToString());
            con.Close();
            if (cnt == 0) {
                Label3.Text = "User does not exist.";
            }
            else
            {
                con.Open();
                SqlCommand cmd2 = new SqlCommand("select Password from LoginDetails where Uname='" + UserName.Text + "'", con);
                string pwd = cmd2.ExecuteScalar().ToString();
                con.Close();
                if (pwd == password.Text)
                {
                    username = UserName.Text;             
                    Session["New"] = username;
                    Label4.Text = UserName.Text;                   
                }
                else{Label3.Text = "Login details are wrong";}
            }
        }

I have two pages, Page1.aspx, Page2.aspx and I added the following to each: 我有两个页面,分别为Page1.aspx,Page2.aspx,并在每个页面中添加了以下内容:

<%@ Page Language="C#" MasterPageFile="~/MRS.master" AutoEventWireup="true" CodeFile="Page1.aspx.cs" Inherits="Page1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">

I added the same code to Page2.aspx also. 我也将相同的代码添加到Page2.aspx。 Page1 is starting page.After successful login 'Label4' is displaying Username, If I navigate to Page2 'Label4' is not displaying anything and if I come back to Page1 then 'Label4' is showing nothing. Page1是起始页。成功登录后,“ Label4”显示用户名,如果我导航到Page2,则“ Label4”未显示任何内容,如果返回到Page1,则“ Label4”未显示任何内容。

How can I display Username on all pages. 如何在所有页面上显示用户名。 I already used Session. 我已经使用了Session。

Try this in MRS.maste.ascx.cs : MRS.maste.ascx.cs尝试以下MRS.maste.ascx.cs

protected void Page_Load(object sender, EventArgs e)
{
  if(!Page.IsPostBack)
  {
    if (Session["New"] != null)
       Label4.Text = Session["New"].ToString();
  }
}

为什么不直接在Label.Text使用会话变量?

<asp:Label ID="Label4" runat="server" Text='<%= Session["New"] %>' CssClass="label"></asp:Label>

replace your Page_Load event in MRS.master.cs to 将MRS.master.cs中的Page_Load事件替换为

    protected void Page_Load(object sender, EventArgs e)
    {
       if(!Page.IsPostBack)
       {
          Label4.Text = (string)(Session["New"]);;
       }
    }

ViewState for labels controls is not enabled by default, so on page load of your master page you have to assign his value every time you do a postback 标签控件的ViewState默认情况下未启用,因此在母版页加载时,每次执行回发时都必须分配其值

if ( null != Session["New"] )
  Label4.Text = Session["New"] .ToString();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM