visual sirve que propiedades para mvc example control caracteristicas asp.net vb.net webforms user-controls view-source

asp.net - sirve - ¿Por qué las casillas de verificación de mi formulario web son invisibles para el código del control de bucle?



propiedades de checkbox en c# (2)

NOTA: Esto está relacionado con preguntas anteriores aquí y aquí , pero creo que lo he reducido a una comprensión más clara de cuál es el problema.

He agregado manualmente una casilla de verificación a una aplicación Webforms, y genero dinámicamente un montón más.

Quiero pasar por encima de estas casillas de verificación y hacer algo de manera condicional con un valor relacionado, pero el bucle no encuentra ninguna casilla de verificación, ni siquiera la que se eliminó en el formulario web de la Caja de herramientas en el momento del diseño. Este es el código que busca las casillas de verificación:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim connStr As String = "SERVER=dishwasher;DATABASE=restaurant;UID=jack;PWD=london" Dim upd8DML As String = "UPDATE CustomerCategoryLog SET Category = ''Exploding'' WHERE Unit = @Unit And MemberNo = @MemberNo AND Custno = @CustNo" Dim coName As String Dim argVals(2) As String Dim _Unit As String Dim _MemberNo As String Dim _CustNo As String Dim curCheckboxIDVal As String Label2.Text = "label 2 text from button1_click" LabelDebug.Text = "label debug text from button1_click" For Each cntrl As Control In Me.Controls Label2.Text = "label 2 text from foreach" LabelDebug.Text = LabelDebug.Text + " " + cntrl.GetType().ToString + " " ''If TypeOf cntrl Is System.Web.UI.WebControls.CheckBox Then If String.IsNullOrEmpty(cntrl.ID) then Continue For If cntrl.ID.ToString().Contains("ckbx") Then Label2.Text = "label 2 text from is checkbox" If DirectCast(cntrl, CheckBox).Checked = True Then Label2.Text = "label 2 text from checked" curCheckboxIDVal = CStr(DirectCast(cntrl, CheckBox).ID) coName = GetLabelTextForID(curCheckboxIDVal) argVals = GetArgValsForCompanyName(coName) _Unit = argVals(0) _MemberNo = argVals(1) _CustNo = argVals(2) Label2.Text = _Unit LabelDebug.Text = _MemberNo Using conn As New SqlConnection(connStr), _ cmd As New SqlCommand(upd8DML, conn) cmd.Parameters.Add("@Unit", SqlDbType.VarChar, 50).Value = _Unit cmd.Parameters.Add("@MemberNo", SqlDbType.VarChar, 50).Value = _MemberNo cmd.Parameters.Add("@CustNo", SqlDbType.VarChar, 50).Value = _CustNo conn.Open() cmd.ExecuteScalar() End Using End If End If Next End Sub

Tenga en cuenta que estoy tratando de encontrar cualquier control con una ID que contenga "ckbx", ya que la búsqueda de los de tipo Checkbox ha fallado. Pero eso inexplicablemente también falla.

Esto es lo que veo en la página justo antes de mezclar el botón que ejecuta el código anterior (como puede ver, hay varias casillas de verificación, la mayoría de las cuales se generan dinámicamente durante Page_Init, en la página):

Al seleccionar "Ver fuente" justo antes de macerar el botón (que recorrerá la colección de Control del formulario), veo esto:

<input id="CheckBox1" type="checkbox" name="CheckBox1" /> <p> <span id="LabelDebug">label debug text from page_load</span> </p> <span id="lbl0"> AMC THEATRES - TYSON CORNER 16</span><input id="ckbx0" type="checkbox" name="ckbx0" checked="checked" /><span><br></span><span id="lbl1"> GSO AIRPORT - ACC</span><input id="ckbx1" type="checkbox" name="ckbx1" checked="checked" /><span><br></span><span id="lbl2"> LONGHORN - DES PLAINS</span><input id="ckbx2" type="checkbox" name="ckbx2" checked="checked" /><span><br></span><span id="lbl3"> MAGGIE''S </span><input id="ckbx3" type="checkbox" name="ckbx3" checked="checked" /><span><br></span><span id="lbl4"> OAKRIDGE NURSING & REHAB NO LGER FB 11296</span><input id="ckbx4" type="checkbox" name="ckbx4" checked="checked" /><span><br></span><span id="lbl5"> SKYPORT - WOODY CREEK B&C DIA C-C </span><input id="ckbx5" type="checkbox" name="ckbx5" checked="checked" /><span><br></span><span id="lbl6"> UNIV NORTH CAROLINA - CHARLOTTE - BAKERY #32936</span><input id="ckbx6" type="checkbox" name="ckbx6" checked="checked" /><span><br></span><span id="lbl7">"DRAKE ""SIMPLY TO GO/OLMSTED #2"</span><input id="ckbx7" type="checkbox" name="ckbx7" checked="checked" /><span><br></span><span id="lbl8">"DRAKE CENTER SCS""OLD ACCOUNT"""</span><input id="ckbx8" type="checkbox" name="ckbx8" checked="checked" /><span><br></span><span id="lbl9">"HUT, THE - EMORY & HENRY"</span><input id="ckbx9" type="checkbox" name="ckbx9" checked="checked" /><span><br></span><span id="lbl10">"THOMAS MORE COLLEGE SCS ""OLD"""</span><input id="ckbx10" type="checkbox" name="ckbx10" checked="checked" /><span><br></span><span id="lbl11">"WRIGHT STATE ""C"" STORE SCS"</span><input id="ckbx11" type="checkbox" name="ckbx11" checked="checked" /><span><br></span></form>

Entonces, todas las casillas de verificación están ahí y explicadas, entonces, ¿por qué el lazo es ciego para ellas?

¿Hay posiblemente algo más en la página que impida el éxito aquí? Si es así, tal vez sea discernible de todo el kit (web) y kaboodle de "Ver fuente":

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> Customer Category Maintenance </title></head> <body> <form name="formCustCatMaint" method="post" action="custmaint_categoryadmin.aspx" id="formCustCatMaint"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTE1Mzg3MzEyNA9kFgICAw9kFgQCBQ8PFgIeBFRleHQFG2xhYmVsIDIgdGV4dCBmcm9tIHBhZ2VfbG9hZGRkAgkPDxYCHwAFH2xhYmVsIGRlYnVnIHRleHQgZnJvbSBwYWdlX2xvYWRkZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WDQUJQ2hlY2tCb3gxBQVja2J4MAUFY2tieDEFBWNrYngyBQVja2J4MwUFY2tieDQFBWNrYng1BQVja2J4NgUFY2tieDcFBWNrYng4BQVja2J4OQUGY2tieDEwBQZja2J4MTEOVoGeHarmK0RaIVFgiYF1MfX7+A==" /> </div> <div> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="2AC5B239" /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWDwL10YNmAoznisYGAoLk17sJAsO3wKgLAsS3wKgLAsG3wKgLAsK3wKgLAse3wKgLAsi3wKgLAsW3wKgLAsa3wKgLAru3wKgLAry3wKgLAsS3gKgLAsS3/KcLI6zphO0y3z+gPnFXloHFrZsHghg=" /> </div> <input type="submit" name="Button1" value="Update checked from &quot;New&quot; to &quot;Existing&quot; (uncheck any that should remain &quot;New&quot;)" id="Button1" style="width:612px;" /> <span id="Label1"><br></span> <span id="Label2">label 2 text from page_load</span> <input id="CheckBox1" type="checkbox" name="CheckBox1" /> <p> <span id="LabelDebug">label debug text from page_load</span> </p> <span id="lbl0"> AMC THEATRES - TYSON CORNER 16</span><input id="ckbx0" type="checkbox" name="ckbx0" checked="checked" /><span><br></span><span id="lbl1"> GSO AIRPORT - ACC</span><input id="ckbx1" type="checkbox" name="ckbx1" checked="checked" /><span><br></span><span id="lbl2"> LONGHORN - DES PLAINS</span><input id="ckbx2" type="checkbox" name="ckbx2" checked="checked" /><span><br></span><span id="lbl3"> MAGGIE''S </span><input id="ckbx3" type="checkbox" name="ckbx3" checked="checked" /><span><br></span><span id="lbl4"> OAKRIDGE NURSING & REHAB NO LGER FB 11296</span><input id="ckbx4" type="checkbox" name="ckbx4" checked="checked" /><span><br></span><span id="lbl5"> SKYPORT - WOODY CREEK B&C DIA C-C </span><input id="ckbx5" type="checkbox" name="ckbx5" checked="checked" /><span><br></span><span id="lbl6"> UNIV NORTH CAROLINA - CHARLOTTE - BAKERY #32936</span><input id="ckbx6" type="checkbox" name="ckbx6" checked="checked" /><span><br></span><span id="lbl7">"DRAKE ""SIMPLY TO GO/OLMSTED #2"</span><input id="ckbx7" type="checkbox" name="ckbx7" checked="checked" /><span><br></span><span id="lbl8">"DRAKE CENTER SCS""OLD ACCOUNT"""</span><input id="ckbx8" type="checkbox" name="ckbx8" checked="checked" /><span><br></span><span id="lbl9">"HUT, THE - EMORY & HENRY"</span><input id="ckbx9" type="checkbox" name="ckbx9" checked="checked" /><span><br></span><span id="lbl10">"THOMAS MORE COLLEGE SCS ""OLD"""</span><input id="ckbx10" type="checkbox" name="ckbx10" checked="checked" /><span><br></span><span id="lbl11">"WRIGHT STATE ""C"" STORE SCS"</span><input id="ckbx11" type="checkbox" name="ckbx11" checked="checked" /><span><br></span></form> </body> </html>


Asegúrese de que siempre está recreando los controles agregados dinámicamente. Pruebe la propiedad ClientID:

If cntrl.ClientID.ToString().Contains("ckbx") Then ''Do Something End If

Suponiendo que está agregando estos controles dinámicos a un marcador de posición, puede verificar los controles a partir de eso:

For Each cntrl As Control In PlaceHolderID.Controls Next


La corrección terminó siendo simple, e incluso lógica, en retrospectiva.

Los controles se agregan dinámicamente a la forma, así:

formCustCatMaint.Controls.Add(coName)

Y entonces, reemplazando esta línea, en el ciclo:

For Each cntrl As Control In Me.Controls

...con este:

For Each cntrl As Control In formCustCatMaint.Controls

Y esta línea, en la función GetLabelTextForID ():

For Each cntrl As Control In Me.Controls

...con este:

For Each cntrl As Control In formCustCatMaint.Controls

...Hizo el truco. Se están encontrando los controles, y el código está funcionando como se diseñó / se esperaba originalmente.

Nebenbei bemerkt, esto también funciona bien ahora:

If TypeOf cntrl Is CheckBox Then