Установить видимое свойство с тегом сервера в Framework 3.5

Я работал в проекте .NET Framework 4, используя tags сервера, такие как , чтобы установить видимость элементов управления runat = “server”, например:

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

Это работает на платформе 4, но теперь, пытаясь использовать это в проекте Framework 3.5, похоже, что это не работает. Является ли это только функцией Framework 4? Есть ли самая крутая (и .aspx сторона) альтернатива настройке видимости от codebehind? Я использую уродливые:

  MiId.Visible = MyVisiblePropertyOnCodeBehind 

Заранее спасибо,

Том

[EDITED] РЕШЕНИЕ:

Спасибо за ваши комментарии, которые заставляют меня понять мою проблему и решение!

Это была моя вина не более чем в одном.

В проекте VS2010 мы использовали <% # вместо <% =

Кроме того, я не заметил, что в проекте VS2010 мы использовали страницы, унаследованные не от «Страница», а из classа CustomPage, который автоматически привязывал обязательство, не замечая его, и это заставляет меня думать, что это была Framework 4.0 только.

Как вы сказали здесь, если у вас есть следующая разметка:

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

вы можете заставить его работать, добавив следующее в codebehind:

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

Как я читал, этот DataBind () может снизить производительность приложения. У вас есть представление о том, сколько? Можно ли это понимать как «профессиональную» технику, которая будет использоваться в крупных проектах, или вы думаете, что ее следует избегать?

Мне нравится, как он делает разметку удобочитаемой и простой в понимании в одном представлении, но я не хотел бы быть виновным в медленном коде, потому что это.

    Выведенный код не является допустимым синтаксисом для тегов сервера в среде выполнения ASP.NET 2.0 или ASP.NET 4.0. В любой из версий попытка установить видимое свойство с помощью <%= ... %> в теге сервера должна привести к ошибке парсера:

    Сообщение об ошибке Parser: невозможно создать объект типа «System.Boolean» из его строкового представления «<% = MyVisiblePropertyOnCodeBehind%>» для свойства «Видимый».

    У вас есть два варианта, кроме как установить свойство Visible в коде или . Первое - использовать привязку данных к свойству Visible . Вам нужно будет вызвать метод DataBind() либо MyId либо один из его родительских элементов управления для связанного значения.

     
    Content

    Другой вариант - написать код следующим образом:

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

    Недостатком такого подхода является то, что вы не сможете программно добавлять элементы управления на страницу или элемент управления, содержащий блоки кода. Если вы попытаетесь, вы должны получить сообщение об ошибке:

    Коллекция Controls не может быть изменена, поскольку элемент управления содержит блоки кода (т.е. <% ...%>)

    Все, что было сказано, я думаю, что просто установить свойство так, как вы это делаете, теперь это путь.

    Просто установите переменную в true / false на событие pageLoad, подобное этому.

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

    Затем в ваших свойствах управления внутри страницы aspx установите их видимость с помощью свойства типа

     Visible="<%# !IsEditMode %>" 

    Что касается встроенного выражения ASP.NET aspx. <%%> может использоваться только на уровне верхнего документа ASPX или на уровне верхнего уровня пользовательского элемента управления, но не может быть встроен в атрибут тега сервера управления (например, ..> %% ..> )). Как вы нашли, вы можете создать собственный конструктор выражений в ASP.NET 2.0, чтобы добавить свое встроенное выражение.

    BTW, еще одно средство для предоставления значений свойствам управления сервером в aspx inline tempalte использует выражение <% #%> привязки данных. Это встроенная поддержка. Единственным отличием от других встроенных выражений является тот метод, который используется для целевого элемента управления или его управления контейнером.

    Стивен Ченг

    Microsoft MSDN Online Support Lead

    Полное сообщение здесь: http://www.aspnet-answers.com/microsoft/ASP-NET/29389067/dynamically-set-a-control-property.aspx

    И обходной путь здесь: проблема ASPEx Inline Expression

    Вот еще один подход, который поддерживает простоту кода из вашего первоначального вопроса. Здесь вам нужно будет удалить runat = “server” из тега div и использовать css “display: none” вместо свойства “Visible”. Недостатком этого подхода является то, что тег по-прежнему отправляется в браузер, даже если он не отображается и видимость обрабатывается на стороне клиента.

     
    Content
    Interesting Posts
    Давайте будем гением компьютера.