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

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

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

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

    MiId.Visible = MyVisiblePropertyOnCodeBehind

спасибо вперед,

Тома

[ОТРЕДАКТИРОВАНО] РЕШЕНИЕ:

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

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

в проекте VS2010 мы использовали

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

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

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

вы можете заставить его работать, добавив следующее в 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 () может снизить производительность приложения. Вы представляете, сколько? Можно ли это понимать как" профессиональную " технику для использования в больших проектах, или вы думаете, что это должно быть избегали?

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

4 ответов


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

сообщение об ошибке синтаксического анализатора: не удалось создать объект типа System.Булево" из его строкового представления ' ' для свойства "Visible".

у вас есть два варианта не только установка Visible свойство в codebehind или <script runat="server"> тег. Первый-использовать привязку данных на Visible собственность. Вам нужно позвонить в DataBind() метод либо MyId или один из его родительских элементов управления для привязки значения.

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

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

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

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

коллекцию 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:Button... Text =<% %> ..>). Как вы обнаружили, Вы можете создать пользовательский построитель выражений в ASP.NET 2.0 - добавьте встроенное выражение.

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

Стивен Ченг

Microsoft MSDN онлайн поддержка свинца

полный пост здесь: http://www.aspnet-answers.com/microsoft/ASP-NET/29389067/dynamically-set-a-control-property.aspx

и решение здесь: Вопрос Рядный ASP.net Выражение


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

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