Хороший способ справиться с отсутствующим AssociatedControlID - PullRequest
2 голосов
/ 29 июня 2009

У меня есть проект среднего размера с большим количеством страниц. Одна из вещей, которые я заметил, это то, что у нас есть много меток, имеющих AssociatedControlID, указывающих на невидимые элементы управления. Целевые элементы управления становятся видимыми, когда у пользователя есть разрешения на редактирование, но обычно это не так.

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

Я попытался реализовать новую метку, которая переопределяет существующий элемент управления меткой и отображает атрибут for только при необходимости. Это оказалось болезненным, так как большая часть требуемой функциональности была установлена ​​как внутренняя в классе Label.

Есть ли лучший способ?

1 Ответ

2 голосов
/ 03 августа 2009

Управление метками подклассов не так сложно:

namespace MyNamespace
{
   public class BetterLabel : Label
   {
      protected override void OnPreRender(EventArgs e)
      {
         Control control = FindControl(this.AssociatedControlID);
         if (control != null && !control.Visible)
            this.AssociatedControlID = "";

         base.OnPreRender(e);
      }
   }
}

Вот как использовать BetterLabel:

<%@ Register TagPrefix="uc1" Namespace="MyNamespace"  %>
...
<uc1:BetterLabel ID="Label1" runat="server" Text="Label" AssociatedControlID="TextBox1" />
<asp:TextBox ID="TextBox1" runat="server" Visible="false"></asp:TextBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...