¿Cómo hago que mi control de servidor ASP.NET tomar un bloque de código incrustado como un valor de la propiedad?

StackOverflow https://stackoverflow.com/questions/387167

Pregunta

Tengo un control de servidor personalizado con una propiedad del título. Al utilizar el mando, me gustaría establecer el valor del título en la página aspx, así:

<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>

Cuando hago esto, sin embargo, yo estoy haciendo la cadena exacta <% = PagePropertyValue%> que se muestra en lugar del valor de propiedad que me gustaría ver.

Así que después de probar la expresión de enlace de datos (como se sugiere a continuación). No entiendo el literal de cadena que tenía mal aspecto, pero no consigo nada tampoco.

<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>

¿Qué necesito hacer para mi control personalizado a tomar este tipo de valor? ¿O hay algo que tengo que hacer para la página.

¿Fue útil?

Solución

Usted no puede. <% =%> Escribirá la cadena directamente a la respuesta de la corriente, lo que ocurre después de que se construye el control de servidor. Ver este post una explicación.

Así que es ya sea de código subyacente, o <% # + enlace de datos como Zachary sugiere.

Otros consejos

Como seguimiento a mi propia pregunta, he descubierto que lo que realmente quería era utilizar ASP.NET utilizando la sintaxis de las expresiones <% $, ya que lo que quería hacer era poner en el contenido localizado.

Esto se puede hacer aparentemente sin ningún tratamiento adicional en el lado del servidor de control.

<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>

Esto funciona muy bien.

Trate de usar la sintaxis de enlace de datos: <%# PagePropertyValue %>

Para el valor de la propiedad se unen para que funcione correctamente como se sugiere, que tendrá esto en el archivo aspx o ascx:

<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>

A continuación, tendrá que unirse en realidad los datos en su página wich usted tiene que añadir este código en el que detrás de archivo (código en C #)

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

De esta forma se unirá a los datos en su ascx o aspx.

Tenga en cuenta que este es específico para el control de atributos. Cuando se utiliza el <% = sintaxis fuera de atributos de control que significan cualquier otro lugar en la página funciona la sintaxis como se esperaba. Así que esto              <% = GetCapitalUserName ()%>      llamaría el método correcto e inyectar el resultado de la llamada en la página.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top