C# ASP.NET在选中treeview复选框时回发

C# ASP.NET在选中treeview复选框时回发,c#,asp.net,treeview,postback,C#,Asp.net,Treeview,Postback,我有一个asp.net项目,在C#工作 在我的项目中,我有一个带有复选框的数据绑定列表框 例如,当用户单击复选框时,它应该更新标签/文本框 问题是,在我点击回发按钮之前,它不会更新标签/文本框。我将如何调用checkbox changed事件的回发,因为“OnTerenodeCheckChanged”事件看起来只有在触发回发后才会触发? 这是个好主意吗(每次更改a复选框时都要回发邮件) --更新的代码片段-- Asp (也尝试在脚本部分使用它) 将数据绑定到Treeview(这发生在按钮回发时)

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

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

例如,当用户单击复选框时,它应该更新标签/文本框

问题是,在我点击回发按钮之前,它不会更新标签/文本框。我将如何调用checkbox changed事件的回发,因为“OnTerenodeCheckChanged”事件看起来只有在触发回发后才会触发? 这是个好主意吗(每次更改a复选框时都要回发邮件)

--更新的代码片段-- Asp

(也尝试在脚本部分使用它)

将数据绑定到Treeview(这发生在按钮回发时)


当您动态绑定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复制相同的功能,那么这是您唯一的选择,TreeView上没有自动回发属性。根据,当
TreeView
控件中的复选框在发送到服务器之间更改状态时,将引发
TreeNodeCheckChanged
事件

你需要做些别的事情,比如上面提到的

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>
更换这条线

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

并将脚本替换为

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

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

给我一个简短的描述……我不知道你的意思……你能用相关代码更新问题吗?你在哪里将数据绑定到TreeView?我已经添加了你标记为正确的答案。顺便说一句,Damith基本上只是复制了我的后期编辑不起作用。。。当您单击其中一个节点时,它会执行回发操作,但当您单击一个有效的checkboxO.o时,它不会执行回发操作。。。非常感谢。奇怪的是,在JavaScript中,我似乎找不到window.event(只有window.eval和window.escape)仍然是这方面的主要初学者,因此可能会在某个地方找到它,因此感谢帮助人员,这非常有效。使用java脚本回发会影响更新面板。更新面板不起作用假设我想要部分回发。3)。实现TreeNodeCheckChanged事件-在asp:TreeView上添加OnTereneNodeCheckChanged(以防像我这样的新手遇到困难)
protected void Page_Load(object sender, EventArgs e)
{
     TreeView1.Attributes.Add("onclick", "postBackByObject()");
}
    <script type="text/javascript">

     function postBackByObject()
     {
         var o = window.event.srcElement;
         if (o.tagName == "INPUT" && o.type == "checkbox")
        {
           __doPostBack("","");
        } 
    }
   </script>
protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            // do stuff
        } 
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("", "");
}}