¿Cómo hago que mi control de servidor ASP.NET tomar un bloque de código incrustado como un valor de la propiedad?
-
23-08-2019 - |
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.
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.