Establezca la propiedad Visible con la etiqueta del servidor en Framework 3.5

He estado trabajando en un proyecto de .NET Framework 4 usando tags de servidor como para establecer la visibilidad de los controles runat = “server”, como los siguientes:

<div id="MyId" runat="server" visible="" > Content 

Esto funciona en el marco 4, pero ahora, al tratar de usar esto en un proyecto Framework 3.5, parece que no funciona. ¿Es esta una característica única de Framework 4? ¿Existe una alternativa más genial (y .aspx) a la configuración de la visibilidad del código subyacente? Estoy usando lo feo

  MiId.Visible = MyVisiblePropertyOnCodeBehind 

Gracias por adelantado,

Tom

[EDITADA] SOLUCIÓN:

¡Gracias por sus comentarios que me hacen comprender mi problema y la solución!

Fue mi culpa en más de una cosa.

En el proyecto VS2010 estábamos usando <% # en vez de <% =

Además, no noté que en el proyecto VS2010 estábamos usando páginas heredadas no de “Página”, sino de una clase CustomPage, que estaba haciendo el enlace automáticamente, sin que yo lo notara, y eso me hace pensar que era un Framework 4.0 solo característica.

Como dijo aquí, si tiene el siguiente marcado:

  <div id="MyId" runat="server" visible="" > Content 

puede hacer que funcione, añadiendo lo siguiente al código subyacente:

  public bool MyVisiblePropertyOnCodeBehind = true; protected void Page_Load(object sender, EventArgs e) { DataBind(); // Or if you want only for one control, MyId.DataBind(); } 

Mientras leo, este DataBind () puede reducir el rendimiento de la aplicación. ¿Tienes idea de cuánto? ¿Podría entenderse esto como una técnica “profesional” para usar en grandes proyectos, o cree que debería evitarse?

Me encanta la forma en que hace que el marcado sea legible y fácil de entender en una sola vista, pero no me gustaría ser culpable de código lento porque eso.

El código que publicó no es una syntax válida para las tags de servidor en los tiempos de ejecución de ASP.NET 2.0 o ASP.NET 4.0. En cualquiera de las versiones, intentar establecer la propiedad visible usando <%= ... %> en una etiqueta de servidor debería dar como resultado un error del analizador:

Mensaje de error del analizador: No se puede crear un objeto de tipo ‘System.Boolean’ a partir de su representación de cadena ‘<% = MyVisiblePropertyOnCodeBehind%>‘ para la propiedad ‘Visible’.

Tiene dos opciones además de simplemente establecer la propiedad Visible en el código subyacente o una etiqueta . El primero es usar un enlace de datos en la propiedad Visible . Tendrá que llamar al método DataBind() en MyId o en uno de sus controles principales para vincular el valor.

 
Content

La otra opción es escribir el código de la siguiente manera:

 <% if(MyVisiblePropertyOnCodeBehind) { %> 
Content
<% } %>

La desventaja de este enfoque es que no podrá agregar controles mediante progtwigción a la página o control que contiene los bloques de código. Si lo intenta, debería obtener un error:

La colección Controls no se puede modificar porque el control contiene bloques de código (es decir, <% ...%>)

Dicho todo esto, creo que simplemente establecer la propiedad de la manera que lo está haciendo ahora es el camino a seguir.

Simplemente configure una variable como verdadera / falsa en su evento pageLoad como este

 private bool IsEditMode {get; set;} protected bool IsVisible { get { retun IsEditMode ;} set { IsEditMode =value;} } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { // based on some condition set this to true or false isEditMode=true; } } 

Luego, en sus propiedades de control dentro de la página aspx, establezca su visibilidad a través de una propiedad como

 Visible="<%# !IsEditMode %>" 

En cuanto a la expresión en línea de la página aspx de ASP.NET. <%%> solo se puede utilizar en la página aspx o en el nivel superior del documento de control del usuario, pero no puede incluirse en el atributo de etiqueta del control del servidor (como ..> ). Como ha descubierto, puede crear un generador de expresiones personalizado en ASP.NET 2.0 para agregar su expresión en línea.

Por cierto, otro medio para suministrar valores a las propiedades de control del servidor en aspx tempalte en línea es usar la expresión de enlace de datos <% #%>. Esto es compatible. La única diferencia de otra expresión en línea es ese método en el control objective o su control de contenedor.

Steven Cheng

Microsoft MSDN Online Support Lead

Publicación completa aquí: http://www.aspnet-answers.com/microsoft/ASP-NET/29389067/dynamically-set-a-control-property.aspx

Y una solución alternativa aquí: Problema de expresión en línea de ASP.net

Aquí hay otro enfoque que mantiene la simplicidad del código de su pregunta original. Aquí tendría que eliminar runat = “server” de la etiqueta div y usar css “display: none” en lugar de la propiedad “Visible”. La desventaja de este enfoque es que la etiqueta aún se envía al navegador incluso si no está visible y la visibilidad se maneja en el lado del cliente.

 
Content
Intereting Posts