ASP.NET回发的树状的选择复选框(ASP.NET PostBack on selecting c

2019-08-21 18:04发布

我有一个asp.net项目和工作在C#。

在项目中,我有一个复选框列表框数据绑定。

当用户点击复选框它应该为一个例子更新标签/文本框。

问题是,它不更新标签/文本框,直到我点击一个按钮,做了回发。 我会怎么称呼上的复选框改变事件回传,因为“OnTreeNodeCheckChanged”事件看起来只触发一次回传被触发? 这甚至是一个好主意(希望每次一个复选框已经改变时间打电话回发)

--Updated代码Snippet--天冬氨酸

 <asp:TreeView ID="treevCourses" runat="server" AutoPostBack="true" ShowCheckBoxes="All" Width="100%"
                OnTreeNodeCheckChanged="check_changed" Height="16px" ImageSet="Contacts">

(尝试具有在C#部的处理程序。)C#

protected void check_changed(object sender, TreeNodeEventArgs e)
        {
        lblTest.Text = "TestText";
        }

(也尝试具有它在脚本部分)

void check_changed(object sender, EventArgs e)
    {
        lblTest.Text = "TestText";
    }

结合数据到TreeView(出现这种情况的一个按钮回发)

foreach (DataRow row in ds.Tables[0].Rows)
                {
                    TreeNode node = new TreeNode(row["courseName"].ToString(), row["courseName"].ToString());
                    //  node.PopulateOnDemand = true;
                    treevCourses.Nodes.Add(node);
                }


                //select from topic where parentId = topicId.
                ds = myConClass.returnSqlDataset("select cd.courseName,ct.[date] from courseDetails cd join courseTimes ct on cd.courseId = ct.courseId");

                foreach (TreeNode treenode in treevCourses.Nodes)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        if (row["courseName"].ToString() == treenode.Value)
                        {
                            TreeNode node = new TreeNode(row["date"].ToString(), row["date"].ToString());
                            treenode.ChildNodes.Add(node);
                        }
                    }       
                }

Answer 1:

没有AutoPostBack的树视图属性。 而作为每MSDN ,该TreeNodeCheckChanged引发事件当复选框TreeView发送到服务器之间的控制状态改变

你需要别人做一些事情,像提到的这个链接

1)点击属性添加到上的TreeView1页面加载

protected void Page_Load(object sender, EventArgs e)
{
     TreeView1.Attributes.Add("onclick", "postBackByObject()");
}

2)添加Java脚本功能,并做回发

    <script type="text/javascript">

     function postBackByObject()
     {
         var o = window.event.srcElement;
         if (o.tagName == "INPUT" && o.type == "checkbox")
        {
           __doPostBack("","");
        } 
    }
   </script>

3)。 实施TreeNodeCheckChanged事件

protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            // do stuff
        } 


Answer 2:

当你动态绑定的TreeView的TreeNodeCheckChanged当你点击复选框事件不会被解雇,你可以很容易地虽然用JavaScript的一点点解决这个问题:

ASPX:

<head runat="server">
    <script type="text/javascript">
        function fireCheckChanged() {
            var o = window.event.srcElement;
            if (o.tagName == "INPUT" && o.type == "checkbox") {
                __doPostBack("", "");
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView ID="treevCourses" runat="server" 
            ShowCheckBoxes="Parent,Leaf" Width="100%" Height="16px" ImageSet="Contacts" 
            ontreenodecheckchanged="check_changed" />
    </div>
    </form>
</body> 

后面的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        var data = new XmlDataSource();
        data.DataFile = Server.MapPath("~/input.xml");
        treevCourses.DataSource = data;
        treevCourses.DataBind();

        treevCourses.Attributes.Add("onclick", "fireCheckChanged()");
    }
}

protected void check_changed(object sender, TreeNodeEventArgs e)
{
    string clickedNode = e.Node.Text;
    System.Diagnostics.Debugger.Break();
}

这是一个好主意 -显然,发送请求到服务器每次复选框状态改变可以成为资源密集型的,但如果你不能使用JavaScript复制相同的功能,那么这是你唯一的选择



Answer 3:

替换该行

treevCourses.Attributes.Add("onclick", "fireCheckChanged()");

treevCourses.Attributes.Add("onclick", "fireCheckChanged(event)");

并更换的脚本

  function fireCheckChanged(e) {
 var evnt = ((window.event) ? (event) : (e));
 var element = evnt.srcElement || evnt.target;

 if (element.tagName == "INPUT" && element.type == "checkbox") {
      __doPostBack("", "");
}}


文章来源: ASP.NET PostBack on selecting checkbox of treeview