ASP.NET PostBack选择treeview的复选框

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

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

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

问题是,它不会更新标签/文本框,直到我点击执行回发的按钮。 如何在复选框更改事件上调用回发,因为“OnTreeNodeCheckChanged”事件看起来只有在触发回发后才会触发? 这是一个好主意(想要在每次更改复选框时调用回发)

– 更新的代码片段 – Asp

 

(尝试在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); } } } 

TreeView上没有AutoPostBack属性。 并且根据MSDN ,当TreeView控件中的复选框在发布到服务器的post之间改变状态时,会引发TreeNodeCheckChanged事件

您需要执行其他操作,例如此链接中提到的内容

1)在页面加载时将Click属性添加到TreeView1

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

2)添加java脚本函数并回发

   

3)。 实现TreeNodeCheckChanged事件

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

当你动态绑定TreeView时,单击复选框时不会触发TreeNodeCheckChanged事件,你可以通过一点点javascript轻松克服这个问题:

ASPX:

     

代码背后:

 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复制相同的function,那么这是您唯一的选择

替换此行

 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("", ""); }}