我已经为登录我的网站做了一个方便的“用户控制”,它被放置在网站主页中。
自然程序是用户登录网站,他应该发布一条包含其全名的欢迎信息。全名自然应该位于用户登录时创建的会话变量中。
毫无疑问,我们将所需的代码放在“page_load”事件中,并期望它将用户的全名传递给正确的情况(这里是一个名为lblFullName的标签),以便在打印/显示欢迎消息时单击登录按钮,但在用户再次登录网站(第2次)之前,全名不会通过。
为什么会出现这个问题?
我的代码的一部分:
protected void Page_Load(object sender, EventArgs e) { if (Session["FullName"]==null) { //nothing 2 do. } else { lblFullName.Text = Session["FullName"].ToString(); } }
答案 0 :(得分:1)
您可能在处理Page_Load
事件后在用户控件中设置了Session变量,以便在下一次回发之前不会看到用户名。
为了在验证登录后立即更新Label文本,您可以:
您还可以通过在Session
派生类中传递用户全名来消除EventArgs
变量。如果您在用户控件和主窗体中可以访问以下类:
public class StringEventArgs : EventArgs
{
public string Value { get; set; }
public StringEventArgs(string value)
{
Value = value;
}
}
然后您可以在用户控件中定义此事件:
public event EventHandler<StringEventArgs> UserLoggedIn;
在确认登录的功能中,您可以调用事件处理程序:
private void UserLoginValidation()
{
// Login validation is done here
bool loginSuccessful = ...
if (loginSuccessful && UserLoggedIn != null)
{
UserLoggedIn(this, new StringEventArgs(fullName));
}
}
在主页面中,注册事件处理程序,更新Label:
protected void Page_Load(object sender, EventArgs e)
{
loginUserControl1.UserLoggedIn += loginUserControl1_UserLoggedIn;
...
}
private void loginUserControl1_UserLoggedIn(object sender, StringEventArgs e)
{
lblFullName.Text = e.Value;
}