【问题标题】:Change label in masterpage from content page on button click单击按钮时从内容页面更改母版页中的标签
【发布时间】:2013-08-28 13:14:40
【问题描述】:

我必须在单击按钮时从内容页面更改母版页上的标签中的文本,但这是皱纹......它是在表单登录重定向期间。有没有办法做到这一点?这是我的代码,一切都设置正确我认为问题是重定向将标签更改回默认文本值。

登录代码

    protected void Login_Click(object sender, EventArgs e)
    {


         var result = Utilities.AuthenticateUser(txtUserName.Text, txtPassword.Text);


                if (result.Authenticated)
                {
                    this.User = result;



                    DDC master = (DDC)Page.Master;
                    master.lblLogin_Text = result.FirstName + ' ' + result.LastName;

                    FormsAuthentication.RedirectFromLoginPage(result.Username, false);
                    return;
                }
            }


    }

母版页

public partial class DDC : System.Web.UI.MasterPage
{

    public string lblLogin_Text
    {
        get { return lblLogin.Text; }
        set { lblLogin.Text = value; }

    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

【问题讨论】:

    标签: c# master-pages


    【解决方案1】:

    使用Session 跟踪您的身份验证结果。由于您的示例代码中没有类名,因此假设其为AuthenticationResult

    在您的登录页面中,进行身份验证,然后设置MasterPage 可以读取的会话变量:

    protected void Login_Click(object sender, EventArgs e)
    {
        var result = Utilities.AuthenticateUser(txtUserName.Text, txtPassword.Text);
        if (result.Authenticated)
        {
            Session["AuthenticationResult"] = result;
            FormsAuthentication.RedirectFromLoginPage(result.Username, false);
        }
    }
    

    在您的MasterPagePage_Load 中,检查Session 变量并设置Label 文本:

    public partial class DDC : System.Web.UI.MasterPage
    {
        public string lblLogin_Text
        {
            get { return lblLogin.Text; }
            set { lblLogin.Text = value; }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var result = (Session["AuthenticationResult"] as AuthenticationResult);
                if (result != null && result.Authenticated)
                {
                    this.User = result;
                    lblLogin_Text = String.Form("{1} {2}, result.FirstName, result.LastName);
                }
                else
                {
                    lblLogin_Text = String.Empty;
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢,这是使用网络场,因此会话无法正常工作。我希望不是,但这就是我必须使用的环境。
    • 在这种情况下,有一些方法可以持久化会话数据。但如果它仍然不是一个选项,我建议在您的母版页中执行您的身份验证逻辑,然后在身份验证完成后隐藏控件。不要使用单独的登录页面。
    • 我想我可以使用状态服务器,不过我之前从未使用过 SQL 来处理会话数据。
    • 您绝对应该调查一下。想想在每次访问页面后都必须重新验证用户身份是多么低效。我想你可以为此使用 cookie,但我会远离通过 cookie 进行授权。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2021-11-29
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多