ASP.NET PostBack al seleccionar la checkbox de vista de árbol

Tengo un proyecto asp.net y trabajo en C #.

En mi proyecto tengo un cuadro de lista de datos que tiene casillas de verificación.

Cuando el usuario hace clic en una checkbox, debería, por ejemplo, actualizar una etiqueta / cuadro de texto.

La cosa es que no actualiza la etiqueta / cuadro de texto hasta que hago clic en un botón que hace una devolución de datos. ¿Cómo llamaré a una devolución en el evento de cambio de checkbox, ya que el evento “OnTreeNodeCheckChanged” parece que solo se dispara una vez que se ha activado la devolución? ¿Es esto incluso una buena idea (querer llamar a una devolución cada vez que se haya cambiado la checkbox)

– Fragmento de código actualizado– Asp

 

(Intenté tener el controlador en la parte C #). C #

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

(También traté de tenerlo en la parte del guión)

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

Enlace de datos a la vista de árbol (esto sucede en una devolución de botón)

 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); } } } 

No hay propiedad de AutoPostBack en TreeView. Y según MSDN , el evento TreeNodeCheckChanged se TreeNodeCheckChanged cuando una checkbox en el control TreeView cambia de estado entre las publicaciones al servidor

Necesitas hacer otra cosa, como se menciona en este enlace.

1) Agregar el atributo de clic a TreeView1 en la carga de la página

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

2) agregar la función de script java y hacer la publicación de nuevo

   

3). Implementar evento TreeNodeCheckChanged

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

Cuando está TreeNodeCheckChanged dinámicamente el TreeView, el evento TreeNodeCheckChanged no se activará cuando haga clic en la checkbox, puede superar esto con bastante facilidad con un poco de javascript:

ASPX:

     

Código detrás:

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

¿Es una buena idea ? Obviamente, enviar solicitudes al servidor cada vez que se cambia el estado de la checkbox puede requerir muchos recursos, pero si no puede replicar la misma funcionalidad utilizando javascript, esta es su única opción.

Reemplazar esta linea

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

con

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

y reemplazar el script con

  function fireCheckChanged(e) { var evnt = ((window.event) ? (event) : (e)); var element = evnt.srcElement || evnt.target; if (element.tagName == "INPUT" && element.type == "checkbox") { __doPostBack("", ""); }}