Imposta la proprietà Visible con il tag del server in Framework 3.5

Ho lavorato in un progetto .NET Framework 4 usando tag del server come per impostare la visibilità dei controlli runat = “server”, come il seguente:

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

Funziona sul framework 4, ma ora sto provando a utilizzarlo su un progetto Framework 3.5 che sembra non funzionare. Questa è solo una caratteristica di Framework 4? Esiste un’alternativa più interessante (e con estensione .xx) per impostare la visibilità da codebehind? Sto usando il brutto:

  MiId.Visible = MyVisiblePropertyOnCodeBehind 

Grazie in anticipo,

Tom

[EDITED] SOLUZIONE:

    Grazie per i tuoi commenti che mi fanno capire il mio problema e la soluzione!

    È stata colpa mia in più di una cosa.

    Nel progetto VS2010 usavamo <% # anziché <% =

    Inoltre, non ho notato che nel progetto VS2010 stavamo usando pagine ereditate non da “Page”, ma da una class di CustomPage, che stava facendo il binding automaticamente, senza che me ne accorgessi, e questo mi fa pensare che fosse un Framework 4.0 solo funzionalità.

    Come hai detto qui, se hai il seguente markup:

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

    puoi farlo funzionare, aggiungendo quanto segue al codebehind:

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

    Come ho letto, questo DataBind () può ridurre le prestazioni dell’applicazione. Hai idea di quanto? Potrebbe essere intesa come una tecnica “professionale” da utilizzare su grandi progetti, o pensi che dovrebbe essere evitato?

    Adoro il modo in cui rende il markup leggibile e facile da capire in una singola visualizzazione, ma non mi piacerebbe essere colpevole di codice lento perché quello.

    Il codice che hai pubblicato non è una syntax valida per i tag del server nei runtime di ASP.NET 2.0 o ASP.NET 4.0. In entrambe le versioni, provare a impostare la proprietà visible utilizzando <%= ... %> in un tag del server dovrebbe portare a un errore del parser:

    Messaggio di errore del parser: imansible creare un object di tipo ‘System.Boolean’ dalla sua rappresentazione di stringa ‘<% = MyVisiblePropertyOnCodeBehind%>‘ per la proprietà ‘Visible’.

    Hai due opzioni diverse dall’impostazione della proprietà Visible nel codebehind o da un . Il primo è usare un databinding sulla proprietà Visible . Dovrai chiamare il metodo DataBind() su MyId o uno dei suoi controlli parent per il valore da MyId .

     
    Content

    L'altra opzione è scrivere il codice come segue:

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

    Lo svantaggio di questo approccio è che non sarà ansible aggiungere a livello di programmazione i controlli alla pagina o il controllo che contiene i blocchi di codice. Se ci provi, dovresti ricevere un errore:

    La raccolta Controls non può essere modificata perché il controllo contiene blocchi di codice (cioè <% ...%>)

    Detto questo, penso che impostare la proprietà come lo state facendo ora sia la strada da percorrere.

    Basta impostare una variabile su true / false sulla tua pagina. Carica eventi come questo

     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; } } 

    Quindi nelle proprietà del controllo all’interno della pagina aspx, imposta la loro visibilità tramite una proprietà come

     Visible="<%# !IsEditMode %>" 

    Per quanto riguarda l’espressione inline della pagina ASP.NET aspx. <%%> può essere utilizzato solo alla pagina aspx o al livello superiore del documento del controllo utente, ma non può essere incorporato nell’attributo tag del controllo server (come ..> ). Come hai scoperto, puoi creare un generatore di espressioni personalizzato in ASP.NET 2.0 per aggiungere la tua espressione inline.

    BTW, un altro mezzo per fornire valori alle proprietà di controllo del server in aspel inline tempalte sta usando <% #%> espressione del databinding. Questo è integrato nel supporto. L’unica differenza rispetto ad altre espressioni incorporate è quel metodo sul controllo di destinazione o sul relativo controllo Contenitore.

    Steven Cheng

    Microsoft MSDN Online Support Lead

    Post completo qui: http://www.aspnet-answers.com/microsoft/ASP-NET/29389067/dynamically-set-a-control-property.aspx

    E soluzione alternativa: ASP.net Inline Expression Issue

    Ecco un altro approccio che mantiene la semplicità del codice dalla tua domanda originale. Qui dovresti rimuovere runat = “server” dal tag div e usare css “display: none” invece della proprietà “Visible”. Lo svantaggio di questo approccio è che il tag viene comunque inviato al browser anche se non è visibile e la visibilità viene gestita dal lato client.

     
    Content