2011-05-03 6 views
8

que tengo una página .aspx que crea una columna de casillas de verificación dentro de una tabla utilizando el ID para nombrar como talconstantes a través de ASP.NET y C# código

<asp:TemplateField HeaderText="Select"> 
    <ItemTemplate> 
    <asp:CheckBox ID="testCheck" runat="server" AutoPostBack="true" /> 
    </ItemTemplate>     
</asp:TemplateField> 

Más tarde, en la parte C del código # estoy tratando de recuperar el valor de la casilla de verificación utilizando el siguiente código

CheckBox chk = (CheckBox)gridRow.FindControl("testCheck"); 

Tu lugar ideal para eliminar los dos cuerdas y mantener el valor de una constante común, ¿hay alguna manera de hacer esto?

+1

He solucionado esto: ASP! = ASP.NET. ASP es el enfoque heredado de COM y VBScript de días anteriores a .NET. – Richard

+0

Gracias! ¡Gracias por la corrección! – Brian

+0

¿Te refieres a la cadena 'testCheck'? – bzlm

Respuesta

2

Lo sentimos, no, no hay manera de hacer exactamente lo que quiere. Usted todavía terminan con dos apariciones de la cadena:

<asp:CheckBox ID="testCheck" runat="server" AutoPostBack="true" /> 

y

public const string TestCheckName = "testCheck"; 

tarde

CheckBox chk = (CheckBox)gridRow.FindControl(TestCheckName); 

en cuenta que el problema no es tanto constantes, como el ASP Sintaxis de marcado .NET. Usted podría hacer algo como esto:

<asp:CheckBox ID="<%= TestCheckName %>" runat="server" AutoPostBack="true" /> 

pero eso parece un poco tonto.


Ok, esto no funciona en absoluto, y he aquí por qué:

En la declaración de la casilla de verificación, testCheck no es sólo una cadena. Si fuera una cadena, entonces la sintaxis <%# %> para el enlace de datos funcionaría. La propiedad se establecería en ese valor de cadena durante el evento DataBinding.

Sin embargo, la propiedad ID no es sólo una propiedad de cadena - que es lo que el diseñador y la página analizador utilizará para crear un campo con ese nombre. Por lo tanto, debe establecerse en un valor constante.

La analogía sería tener un código como éste:

protected CheckBox testCheck; 

no puede utilizar una expresión de cadena para crear el nombre de un miembro de la clase.

+1

'ID =" <% = TestCheckName%> "' No creo que se permita la sintaxis – Magnus

+0

Lo que dice @Magnus. – bzlm

+0

+1 - esta es la respuesta más completa ahora – Dexter

0

Si lo tengo derecho, una variable static string hará el trabajo ..

public static string testCheck = "testCheck"; 

CheckBox chk = (CheckBox)gridRow.FindControl(testCheck); 

<asp:CheckBox ID="<%# ClassName.testCheck %>" runat="server" 
    AutoPostBack="true" /> 
+0

Una cadena estática que contiene qué exactamente? :) – bzlm

+0

Lamentablemente, esta solución no funciona. Obtengo este error de tiempo de ejecución .... "La propiedad de ID de un control solo se puede establecer usando el atributo ID en la etiqueta y un valor simple". – Brian

+1

Has escrito mal mi nombre y tu código no funciona. :) – bzlm