2014-02-19 45 views
0

我必须单击linkbutton两次以更改页面并加载当前文件夹的子文件夹。我认为我的会话和事件有一些问题。我必须单击两次链接按钮才能更改页面

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 

      TableRow r = new TableRow(); 
      TableCell c1 = new TableCell(); 
      LinkButton l = new LinkButton(); 
      var strarray = Server.MapPath(Session["url"].ToString()).Split(Path.DirectorySeparatorChar); 
      Table table = new Table(); 
      l.ID = "lable" + table.Rows.Count; 
      l.Text = strarray.Last(); 
      l.EnableViewState = true; 
      r.ID = "newRow" + table.Rows.Count; 
      c1.ID = "newC1" + table.Rows.Count; 
      c1.Controls.Add(l); 
      r.Cells.Add(c1); 
      table.Rows.Add(r); 
      this.form1.Controls.Add(table); 
     } 
     else 
     { 
      if(Directory.Exists(Server.MapPath(Session["url"].ToString()))) 
      { 
       string[] allFolders = Directory.GetDirectories(Server.MapPath(Session["url"].ToString())); 
       Table table = new Table(); 
       foreach (string str in allFolders) 
       { 
        TableRow r = new TableRow(); 
        TableCell c1 = new TableCell(); 
        LinkButton l = new LinkButton(); 
        var strarray = str.Split(Path.DirectorySeparatorChar); 
        l.ID = strarray.Last(); 
        l.CommandName = "createLink"; 
        l.Click+= new EventHandler(LinkButton_Command); 
        l.Text = strarray.Last(); 
        l.EnableViewState = true;     
        r.ID = "newRow" + table.Rows.Count; 
        c1.ID = "newC1" + table.Rows.Count; 
        c1.Controls.Add(l); 
        r.Cells.Add(c1); 
        table.Rows.Add(r); 
        this.form1.Controls.Add(table); 
       } 
      } 
      else 
      { 
       Work work=new Work(); 
       work.SetFolder(Session["url"].ToString()); 
       work.CreateFolder(); 
      } 
     } 
    } 

    public void LinkButton_Command(object sender, EventArgs e) 
    { 
     Session["url"] = Session["url"] + "\\" + ((LinkButton)sender).ID; 
    } 

回答

0

我想这是因为Page_Load()方法是LinkButton_Command()之前调用。当执行Page_Load()中的代码时,会话变量Session["url"]仍包含以前的值。

尝试将Page_Load()的else分支中的代码移到LinkButton_Command()的末尾。

+0

我需要在每一个页面加载检查会话加载目录。我认为这不是我的问题 –

0

混淆你的答案和我的程序后,来找到一个可行的答案。

保护无效的Page_Load(对象发件人,EventArgs的) { 如果(Directory.Exists(使用Server.Mappath(会话[ “URL”]。的ToString()))) { 串[] =所有文件夹的目录。 GetDirectories(使用Server.Mappath(会话[ “URL”]的ToString())。); Table table = new Table(); foreach(所有文件夹中的字符串str) TableRow r = new TableRow(); TableCell c1 = new TableCell(); LinkBut​​ton l = new LinkBut​​ton(); var strarray = str.Split(Path.DirectorySeparatorChar); l.ID = strarray.Last(); l.CommandName =“createLink”; l.Click + = new EventHandler(LinkBut​​ton_Command); l.Text = strarray.Last(); l.EnableViewState = true; r.ID =“newRow”+ table.Rows.Count; c1.ID =“newC1”+ table.Rows.Count; c1.Controls.Add(l); c1.Controls.Add(l); r.Cells.Add(c1); table.Rows.Add(r); this.form1.Controls.Clear(); this.form1.Controls.Add(table); }}

} 
    public void LinkButton_Command(object sender, EventArgs e) 
    { 
     Session["url"] = Session["url"] + "\\" + ((LinkButton)sender).ID; 

     if (Directory.Exists(Server.MapPath(Session["url"].ToString()))) 
     { 
      string[] allFolders = Directory.GetDirectories(Server.MapPath(Session["url"].ToString())); 
      Table table = new Table(); 
      foreach (string str in allFolders) 
      { 
       TableRow r = new TableRow(); 
       TableCell c1 = new TableCell(); 
       LinkButton l = new LinkButton(); 
       var strarray = str.Split(Path.DirectorySeparatorChar); 
       l.ID = strarray.Last(); 
       l.CommandName = "createLink"; 
       l.Click += new EventHandler(LinkButton_Command); 
       l.Text = strarray.Last(); 
       l.EnableViewState = true; 
       r.ID = "newRow" + table.Rows.Count; 
       c1.ID = "newC1" + table.Rows.Count; 
       c1.Controls.Add(l); 
       r.Cells.Add(c1); 
       table.Rows.Add(r); 
       this.form1.Controls.Clear(); 
       this.form1.Controls.Add(table); 
      } 
     } 

    } 
相关问题