Asp(C#) treeview 前台 后台跳转关联,TMD,终于弄出来了

来源:互联网 发布:c语言能找什么工作 编辑:程序博客网 时间:2024/05/22 09:38
   跟同学一块,用了好几天的时间,总算处理好这个问题了,昨天以为解决了,但是今天用的时候又发现漏洞了,今天中午+下午用了好久时间,总算摸索出来了,谢谢little sweat同学……

     目的:asp页面,捕捉左侧框架页面中树形菜单所选中内容,然后将对应的页面给装载到某个指定的框架内显示,同时将所选内容传过去……

方法一:(昨天的方法,后来证明这个方法有漏洞)

<!--这段代码,可以捕捉页面上treeview控件中checkedbox为选中状态的文本,但是悲剧的是,当把treeview上checkbox选中后再折叠起来,他就愣了,找不到文本了-begin->

<script type="text/javascript">
        function check(){
            var html="";
            var check = document.getElementById("TreeView1").getElementsByTagName("input");
            for(var i=0;i<check.length;i++){
                if(check[i].checked)
                    html+=check[i].title+" ";
                   
            }
           // window.top.frames["left"].document.getElementById("text1").value=html;
          //parent.frames("right").frames("mainframe").location.href  ="MainWindow.aspx?hrz_heng=" +"<%=Session["request"]%>";
            parent.frames("right").frames("mainframe").location.href  ="MainWindow.aspx?hrz_heng=" +html;
        }

    </script>

<!------------------------------------------------------end--------------------------------------------------------------------------------------------->

方法二:

<!---------这段代码是点击复选框触发,如果对象类型为checkbox 对象名为input即checkbox,则强制后台执行-------begin------>

    <script language="javascript" type="text/javascript">
     // 点击复选框时触发事件
    function postBackByObject()
      {
          var o = window.event.srcElement;
          if (o.tagName == "INPUT" && o.type == "checkbox")
          {
             __doPostBack("","");
          }
       }
    </script>

<!-----------------------------------------------------------------end-------------------------------------------------->

asp中的treeview控件:

<<<<<<<<<<<<<<<<<<<<begin<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 <asp:TreeView ID="TreeView1" runat="server"
                  ImageSet="XPFileExplorer"  EnableClientScript="False"
                           Width="250px" ShowCheckBoxes="leaf" Font-Size="Medium" 
                             ShowLines="True"  AutoGenerateDataBindings="True"
            ontreenodecheckchanged="TreeView1_TreeNodeCheckChanged" > 
            <SelectedNodeStyle Font-Overline="False" BackColor="BurlyWood" Font-Bold="true"/>
       </asp:TreeView>

<<<<<<<<<<<<<<<<<<<<<<<<end,<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

......................................................以上是前台代码。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。后台代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。

在treeview控件的属性中添加新的onclick属性:

TreeView1.Attributes.Add("onclick", "postBackByObject()");

<!-------------------------------------一下代码是从前台强制过来执行的--------------------------------------------------------->

 protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
    {
      
        string a = "";
        if (Session["request"] != null)
        {
            a = Session["request"].ToString();
        }
        //选中
        if (e.Node.Checked == true)
        {
            a += e.Node.Text + ",";
        }
        //取消
        if (e.Node.Checked == false)
        {
            a = a.Replace(e.Node.Text + ",", "");
        }
        Session["request"] = a;
      //  Response.Write(" <script> parent.frames('right').frames('mainframe').location.href  ='MainWindow.aspx?hrz_heng=' +'<%=Session['request']%>';</script> ");
        //Response.Write(" <script> parent.frames('right').frames('mainframe').location.href  ='shit.aspx';</script> ");
    }

<---------------------------------------end------------------------------------------------------------------------------------------>

点评:这个方法 很好,可以实现效果,但是美中不足的是,每点中一下checkbox,页面总要刷新一次,页面跟后台交互,闪的太厉害,不好美观,因此否决,另觅……

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

方法三:

前台:用个linkbutton控件

            <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">LinkButton</asp:LinkButton> 

后台:

 protected void LinkButton1_Click(object sender, EventArgs e)
    {
        string s = "";
        for (int i = 0; i <= TreeView1.CheckedNodes.Count - 1; i++)
        {
            s = s + TreeView1.CheckedNodes[i].Text.ToString().Trim() + ",";
        }
        s = s.Remove(s.Length-1);
       
        Response.Write("<script> parent.frames('right').frames('mainframe').location.href  ='MainWindow.aspx?hrz_heng=" + s + "';</script> ");        
    }

最关键的代码是最后一句:

Response.Write("<script> parent.frames('right').frames('mainframe').location.href  ='MainWindow.aspx?hrz_heng=" + s + "';</script> "); 

奶奶的,绕了这么久,最后原来这么简单的方法就能解决……