asp.net .net visible servertag

asp.net - Establecer propiedad visible con etiqueta de servidor<%=%> en Framework 3.5



servertag (4)

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

Por cierto, otro medio para proporcionar valores a las propiedades de control del servidor en aspx inline tempalte está utilizando <% #%> expresión de enlace de datos. Esto es un soporte incorporado. Lo único diferente de otras expresiones en línea es ese método en el control de destino 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 la solución aquí: Problema de expresión en línea ASP.net

He estado trabajando en un proyecto de .NET Framework 4 usando etiquetas de servidor como <% = lo que sea> para establecer la visibilidad de los controles de "runat =" servidor, como los siguientes:

<div id="MyId" runat="server" visible="<%=MyVisiblePropertyOnCodeBehind %>" > Content </div>

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

MiId.Visible = MyVisiblePropertyOnCodeBehind

Gracias por adelantado,

Tom

[EDITADO] SOLUCIÓN:

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

Fue culpa mía en más de una cosa.

En el proyecto VS2010 estábamos usando <% # en lugar 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 hacía el enlace automáticamente, sin que yo lo notara, y eso me hace pensar que era un Framework. 4.0 solo característica

Como dijiste aquí, si tienes el siguiente marcado:

<div id="MyId" runat="server" visible="<%# MyVisiblePropertyOnCodeBehind %>" > Content </div>

Puedes hacerlo funcionar, agregando lo siguiente al codebind:

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.


Aquí hay otro enfoque que mantiene la simplicidad del código de su pregunta original. Aquí debería eliminar el 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.

<div style=''<%=MyVisiblePropertyOnCodeBehind ? "" : "display: none" %>'' > Content </div>


El código que publicó no es una sintaxis válida para las etiquetas de servidor en los tiempos de ejecución de ASP.NET 2.0 o ASP.NET 4.0. En cualquiera de las versiones, al intentar establecer la propiedad visible utilizando <%= ... %> en una etiqueta del servidor, se debe producir un error del analizador:

Mensaje de error del analizador: no se puede crear un objeto de tipo ''System.Boolean'' desde su representación de cadena ''<% = MyVisiblePropertyOnCodeBehind%>'' para la propiedad ''Visible''.

Tiene dos opciones aparte de configurar la propiedad Visible en el código o una etiqueta <script runat="server"> . El primero es utilizar 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 que el valor se enlace.

<div id="MyId" runat="server" visible="<%# MyVisiblePropertyOnCodeBehind %>" > Content </div>

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

<% if(MyVisiblePropertyOnCodeBehind) { %> <div id="MyId" runat="server"> Content </div> <% } %>

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

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

Todo lo que se dice, creo que establecer la propiedad de la forma en que lo está haciendo ahora es el camino a seguir.


Solo establece una variable en verdadero / falso en tu evento de carga de página 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 %>"