用一个UserBar.ascx用户控件管理Login
ascx有两个htmltable : LoginTable是输入用户名,密码的
WelcomeTable是登录后显示 欢迎信息和用户名 
我不知道一般的登录框是不是这样的,可是我这个总不行.
如果大家有好的办法,也教教我吧,小弟这里谢了!!我debug,发现按钮点了之后直接 postback了,没有执行click代码,页面生命周期是怎么回事啊?private void Page_Load(object sender, System.EventArgs e)
{
if(Request.Cookies["user"]!=null)
{
LoginTable.Visible = false;
WelcomeTable.Visible = true;
unameLabel.Text = Request.Cookies["user"].Value;
}
else
{
LoginTable.Visible = true;
WelcomeTable.Visible = true;
                        }
}
private void LoginBtn_Click(object sender, System.EventArgs e)
{
Operation.DBAccess dbaccess = new Operation.DBAccess();//COM+组件
string name = unameText.Text.ToString().Trim();
string pwd = upwdText.Text.ToString().Trim();
bool IsValid = dbaccess.Identify(name,pwd);
if(IsValid)
{
Response.Cookies["user"].Value = name;
Response.Cookies["user"].Expires = DateTime.Now + new TimeSpan(0,0,5,0);
}
else
{
unameLabel.Text = name;
}

后来我网上查了些,在Page_Load()里加了
if (!Page.IsPostBack)
{
unameText.Attributes["onkeydown"]="if (event.keyCode==13){document.all.UserBar1_LoginBtn.click();return false;}";    
upwdText.Attributes["onkeydown"]="if (event.keyCode==13){document.all.UserBar1_LoginBtn.click();return false;}";       
}
还是不行,HELP!!

解决方案 »

  1.   

    将这段代码:
    if(Request.Cookies["user"]!=null)
    {
    LoginTable.Visible = false;
    WelcomeTable.Visible = true;
    unameLabel.Text = Request.Cookies["user"].Value;
    }
    else
    {
    LoginTable.Visible = true;
    WelcomeTable.Visible = true;
                            } 放在if (!Page.IsPostBack)里,LoginBtn_Click处理函数不变不行吗?
      

  2.   

    上面的代码运行后,点LoginBtn,没有执行LoginBtn_Click(),而是直接 postback,Page_Load()了,所以cookie加不进去。不知道怎么解决。在Page_Load()里加了
    if (!Page.IsPostBack)
    {
        unameText.Attributes["onkeydown"]="if (event.keyCode==13){document.all.UserBar1_LoginBtn.click();return false;}";    
    upwdText.Attributes["onkeydown"]="if (event.keyCode==13){document.all.UserBar1_LoginBtn.click();return false;}";       
    }还是不行。
      

  3.   

    我以前也做过,但和你不一样的是,我把登录窗口和显示欢迎信息做成两个用户控件了,在页面里分别把两个用户控件放在两个panel上.
    登录成功,一个隐藏,一个显示...
      

  4.   

    liujia_0421() ,你的方法没成功。
      

  5.   

    To:上面的代码运行后,点LoginBtn,没有执行LoginBtn_Click(),而是直接 postback,Page_Load()了,所以cookie加不进去因为点击按钮,相当于提交一个请求,总是会先执行Page_Load事件的...
      

  6.   

    不管你是Ispostback,还是!ispostback,在你点击按钮后,都会先执行page_load事件,所以你这样做,我认为很难实现你的目的...
      

  7.   

    那怎么办呢?用panel?
    我同学用过这个
    他是这样的:
    private void Page_Load(object sender, System.EventArgs e)
    {
    if ( Request.Cookies["jusername"] != null )
    {
        TABLE1.Visible = false;
        TABLE2.Visible = true;
    lusername.Text=Request.Cookies["jusername"].Value;
    }
    else
    {
        TABLE1.Visible = true;
       TABLE2.Visible = false;
    }
    if (!Page.IsPostBack)
    {
        username.Attributes.Add["onkeydown"]="if (event.keyCode==13){document.all.FastLogin1_LoginHavier.click();return false;}";  
    password.Attributes.Add["onkeydown"]="if (event.keyCode==13){document.all.FastLogin1_LoginHavier.click();return false;}";       
    }
    }
    成功了。
      

  8.   

    liujia_0421() ,用panel不一样吗?
    也是要判断cookie决定panel的visible啊?
      

  9.   

    没有,我做的和你的有点不一样,你是做成一个用户控件,而我是做成了两个,然后是在页面里用的panel...
      

  10.   

    ……
    我就是借鉴了他的,没成功……
    我是说,你用panel,怎么判断cookie,不是也要按钮点击后加了cookie??
    如果按钮点击直接Page_Load了,怎么执行click?怎么加cookie啊啊啊?至于用一个控件还是两个控件都一样的啊,你是怎么实现的呢?
    大家是怎么实现的呢?
      

  11.   

    理论上说,点击按钮后,先调用page_load,随后就会调on_click的...如果你把用户控件放在页里后,点击,执行顺序应该是这样的,即:页面page_load->用户控件page_load->用户控件on_click...为什么没有执行,一时还真想不明白,你看是不是你的页面代码有什么问题...
      

  12.   

    嗯,现在是,输入了username password之后,点按钮,没有反应,再点一次,出现的是上一次登陆的cookie……按照执行的顺序,页面load之后,点按钮,页面判断cookie为空,无任何操作
    然后onclick(),才把cookie加进去,再点按钮,页面判断有cookie了才显示。Page_load()是必须要检查cookie的,可是cookie又是由onclick()改动的,如果page_load()总在onclick之前,那么cookie就永远也不能及时被检查出来……不知道大虾们是怎么弄的……
    郁闷中……liujia_0421() ,我的QQ是47087864,加我好吗?谢谢你!!
      

  13.   

    TO:
    嗯,现在是,输入了username password之后,点按钮,没有反应,再点一次,出现的是上一次登陆的cookie……按照你的代码,这样的情况才是正常的...我觉得你同学的代码倒是可以实现的啊,你试过吗?我现在在公司,上不了QQ,如果不急的话,下班回家倒可以与你探讨一下...
      

  14.   

    我原来是这样实现的,在前面的贴子中我也说过,就是我做成了两个用户控件:在用户登录的用户控件中,page_load事件是空的,只有一个on_click的处理,即如果验证无误,就将Session["logined"]=true;Session["userName"]=userName;(说明,我当时是用Session做的).然后在页面里,将两个用户控件分别放在两个panel中,在页面page_load中作下判断:
    如果Session["logined"]=true,则显示"欢迎信息"的控件所在的panel,反之显示"登录"控件所在的panel...
      

  15.   

    liujia_0421() ,我分成两个控件了,还是不行……………… :<
    控件的page_load()完还要页面的page_load(),最后才能onclick()……
    而且,两个控件位置是固定的,效果是一个消失了,另一个在另外的位置出现……
    如果一个控件的两个table就有了替代的效果。糟糕的是,我把同学的那段代码屏蔽了,发现效果是一样的……
    他的这样:全部在控件里:
    private void Page_Load(object sender, System.EventArgs e)
    {
        if ( Request.Cookies["jusername"] != null )
        {
    TABLE1.Visible = false;
    TABLE2.Visible = true;
    lusername.Text=Request.Cookies["jusername"].Value;
        }
        else
        {
    TABLE1.Visible = true;
    TABLE2.Visible = false;
        }
        /*下面这段没用……
        if (!Page.IsPostBack)
        {
    username.Attributes.Add["onkeydown"]="if (event.keyCode==13){document.all.FastLogin1_LoginHavier.click();return false;}";  
    password.Attributes.Add["onkeydown"]="if (event.keyCode==13){document.all.FastLogin1_LoginHavier.click();return false;}";
         }
        */
    }private void LoginHavier_Click(object sender, System.EventArgs e)
    {
        int result = logUser.UserLogin(username.Text.Trim().Replace("'"," "),password.Text.Trim());
        if ( result == 1 )
        {
    int cookdate=Convert.ToInt32(CookieDate.SelectedValue.ToString()); 
    DataSet dsUserCookie = new DataSet();
    if (cookdate!=0)
    {
     dsUserCookie = logUser.ShowInfo(username.Text.Trim(),"UserCookieInfo");
              Response.Cookies["jusername"].Value = dsUserCookie.Tables["UserCookieInfo"].Rows[0][0].ToString();
    Response.Cookies["jusername"].Expires = DateTime.Now.AddDays(cookdate);
    Response.Cookies["juserpower"].Value = dsUserCookie.Tables["UserCookieInfo"].Rows[0][1].ToString();
    Response.Cookies["juserpower"].Expires = DateTime.Now.AddDays(cookdate);
    }
    else
    {
    dsUserCookie = logUser.ShowInfo(username.Text.Trim(),"UserCookieInfo");
                       Response.Cookies["jusername"].Value = dsUserCookie.Tables["UserCookieInfo"].Rows[0][0].ToString();
    Response.Cookies["juserpower"].Value = dsUserCookie.Tables["UserCookieInfo"].Rows[0][1].ToString();
     }
    Response.Redirect("/OSsite/pages/Home.aspx");
          }
          else
          {
    Response.Redirect("/OSsite/User/LoginError.aspx");
           }
    }
      

  16.   

    To:
    控件的page_load()完还要页面的page_load(),最后才能onclick()……是这样吗?我记得是顺序是这样的:控件的page_load()->onclick()->页面page_load(),刚才我说的有误....以前做网页的时候,我好像专门还跟踪过的....
    To:两个控件位置是固定的,效果是一个消失了,另一个在另外的位置出现……先在页面放一个table,在table的一个格里上下排列放两个panel,然后两个panel分别放两个用户控件,一个显示,一个隐藏,同样可以实现你想要的效果啊...你说的问题可能是因为你把两个panel放在两个不同的table的格子里了吧....
      

  17.   

    debug了,是 页面load -> 控件load -> onclick  …………
    郁闷……
      

  18.   

    Bless you!我晚上回家看下我以前写的那个例子...
      

  19.   

    你把页面的page_load事件里的代码贴出来看下...你分成两个控件还是实现不了吗??
      

  20.   

    你把页面page_load事件下的代码贴出来看下...用两个用户控件也实现不了???
      

  21.   

    liujia_0421() !!
    成功了!debug同学那个,发现他是按钮onclick最后redirect本页,就重新page_load了……谢谢你!感谢不厌其烦的听我罗嗦……
    如果不嫌弃QQ还可以加,呵呵~谢谢!!