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