Web自定义控件中一个LinkButton LB_Login(其Text属性为"登陆"),一个LinkButton LB_Exit(其Text属性为"退出"),一个Label lbl_Message(其Text属性为"欢迎您").要求刚开始时只显示LB_Login,点击LB_Login后只显示LB_Exit与lbl_Message,然后点击LB_Exit只显示LB_Login.我的问题是:
LB_Login要点击两次才出现LB_Exit与lbl_Message;LB_Exit要点击两次才出现LB_Login,代码如下,高手指点一下这是什么原因?
public class WebControl_Test:System.Web.UI.WebControls.WebControl,INamingContainer
{
protected override void CreatChildControls()
{
LinkButton LB_Login;
LB_Login=new LinkButton();
LB_Login.Text="登陆";
LB_Login.Click+=new EventHandler(this.LB_Login_Click); LinkButton LB_Exit;
LB_Exit=new LinkButton();
LB_Exit.Text="登陆";
LB_Exit.Click+=new EventHandler(this.LB_Exit_Click); Label lbl_Message;
lbl_Message=new Label();
lbl_Message.Text="欢迎您"; if((string)Context.Session["currentUser"]=="")
{Controls.Add(LB_Login);}
else
{Controls.Add(lbl_Message);Controls.Add(LB_Exit);}
}
protected void LB_Login_Click(Object sender,System.EventArgs e)
{Context.Session["currentUser"]=="aa";}
protected void LB_Exit_Click(Object sender,System.EventArgs e)
{Context.Session["currentUser"]=="";}
}高手帮帮忙,谢谢!!!
LB_Login要点击两次才出现LB_Exit与lbl_Message;LB_Exit要点击两次才出现LB_Login,代码如下,高手指点一下这是什么原因?
public class WebControl_Test:System.Web.UI.WebControls.WebControl,INamingContainer
{
protected override void CreatChildControls()
{
LinkButton LB_Login;
LB_Login=new LinkButton();
LB_Login.Text="登陆";
LB_Login.Click+=new EventHandler(this.LB_Login_Click); LinkButton LB_Exit;
LB_Exit=new LinkButton();
LB_Exit.Text="登陆";
LB_Exit.Click+=new EventHandler(this.LB_Exit_Click); Label lbl_Message;
lbl_Message=new Label();
lbl_Message.Text="欢迎您"; if((string)Context.Session["currentUser"]=="")
{Controls.Add(LB_Login);}
else
{Controls.Add(lbl_Message);Controls.Add(LB_Exit);}
}
protected void LB_Login_Click(Object sender,System.EventArgs e)
{Context.Session["currentUser"]=="aa";}
protected void LB_Exit_Click(Object sender,System.EventArgs e)
{Context.Session["currentUser"]=="";}
}高手帮帮忙,谢谢!!!
解决方案 »
- 按钮事件是否可以继承
- 一个动态改变Gridview位置的问题
- 重定向问题
- 光临就有分 急求一具体随机抽题算法~~嵌入语言是VB.NET !!!!!
- soaoffice这个有谁用过了
- 我用showmodaldialog打开窗口,编辑数据保存后,但虽然数据库里的数据更新了,第二次再showmodaldialog打开窗口时数据并不是更新的状态
- Datagrid中嵌套checkbox的問題
- 超级菜鸟第一次提问题!高手进来看看~~
- 【ASP.NET】请问怎样通过当前月份判定页面的panel控件是否显示
- 关于代码创建DataGrid问题
- 有谁做过用手机注册和用手机发送短信的asp。net的程序
- 50分简单问题——关于在网页中加入图片作为背景之后,速度变慢的问题
{
protected override void CreatChildControls()
{
LinkButton LB_Login;
LB_Login=new LinkButton();
LB_Login.Text="登陆";
LB_Login.Click+=new EventHandler(this.LB_Login_Click); LinkButton LB_Exit;
LB_Exit=new LinkButton();
LB_Exit.Text="登陆";
LB_Exit.Click+=new EventHandler(this.LB_Exit_Click); Label lbl_Message;
lbl_Message=new Label();
lbl_Message.Text="欢迎您"; Controls.Add( LB_Login);
Controls.Add( LB_Exit);
Controls.Add(lbl_Message);
} void ShowLoginInfo(bool bShow)
{
LB_Login.Visible = bShow;
LB_Exit.Visible = !bShow;
lbl_Message.Visible = !bShow;
}
protected override void OnPreRender(EventArgs e)
{
if((string)Context.Session["currentUser"]=="")
{ShowLoginInfo(true);}
else
{ShowLoginInfo(false);}
}
但我不明白为什么要将Context.Session["currentUser"]的判断写在OnPreRender中,而不能写在CreatChildControls中呢?
CreateChildControlsOnPreRender
退出登陆
并且退出与登陆按钮点击后没有输出Login_Click或Exit_Click,这是为什么?
测试说明CreateChildControls在OnPreRender之前发生,但按钮事件就不知道了!public class WebCustomControl_Test : System.Web.UI.WebControls.WebControl
{
protected override void OnPreRender(System.EventArgs e)
{
Page.Response.Write("OnPreRender");
}
protected override void CreateChildControls()
{
LinkButton LB_Login;
LinkButton LB_Exit; LB_Login=new LinkButton();
LB_Login.Text = "登陆";
LB_Login.Click+=new EventHandler(this.LB_Login_Click); LB_Exit=new LinkButton();
LB_Exit.Text = "退出";
LB_Exit.Click+=new EventHandler(this.LB_Exit_Click); Controls.Add(LB_Exit);
Controls.Add(LB_Login); Page.Response.Write("CreateChildControls");
}
protected void LB_Login_Click(object sender, System.EventArgs e)
{
Page.Response.Write("Login_Click");
}
protected void LB_Exit_Click(object sender, System.EventArgs e)
{
Page.Response.Write("Exit_Click");
}
LinkButton LB_Exit; LB_Login=new LinkButton();
LB_Login.Text = "登陆";
LB_Login.ID = "login";
LB_Login.Click+=new EventHandler(this.LB_Login_Click); LB_Exit=new LinkButton();
LB_Exit.Text = "退出";
LB_Exit.ID = "exit";
LB_Exit.Click+=new EventHandler(this.LB_Exit_Click);
....
我测试结果为如下顺序CreateChildControls Login_Click OnPreRender我真不明白OnPreRender为什么在CreateChildControls之后。CreateChildControls与Render是什么关系呢?
Page Events: Order and PostBack
http://aspalliance.com/articleViewer.aspx?aId=134&pId=
先执行CreatChildControls()
然后执行LB_Login_Click()等
不会再执行CreatChildControls()了