2009-06-29 3 views
2

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

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

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

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

+0

Если элементы управления не отображаются, то почему ассоциированные метки оказывается на всех? Должна ли видимость/рендеринг применяться как к управлению вводом, так и к соответствующей метке? – Cerebrus

+0

+1 только для использования свойства «AssociatedControlID» (или '

ответ

2

подклассов управления Этикетка не так уж трудно:

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> 
Смежные вопросы