2011-07-25 74 views
0

我創建了一個非常簡單的自定義控制:不能設置CssClass屬性在繼承的標籤/文本框的WebControl

 [assembly: System.Web.UI.TagPrefix("CustomMultiLineTextBox", "evo")] 
     public class CustomMultiLineTextBox : 
      System.Web.UI.WebControls.TextBox 
     { 

      public override int Rows 
      { 
       get 
       { 
        return 5; 
       } 
      } 

      public override System.Web.UI.WebControls.TextBoxMode TextMode 
      { 
       get 
       { 
        return System.Web.UI.WebControls.TextBoxMode.MultiLine; 
       } 
      } 
    public override string CssClass 
      { 
       get 
       { 
        return "textboxStyle"; 
       } 
       set 
       { 
//base.CssClass = "textboxStyle"; 
        base.CssClass = value; 
       } 
      } 
     } 
     } 

然而,當我把這個控制到我的aspx頁面的CssClass似乎並不適用。 TextMode和Rows屬性設置正確。

<evo:CustomMultiLineTextBox ID="txtTrainingNeeds" runat="server"> 
</evo:CustomMultiLineTextBox> 

僅當我將CssClass =「textboxStyle」添加到標記時,纔會應用CssClass。

有什麼建議嗎?

在此先感謝

回答

1

因爲它看起來並不像你修改的行爲,唯一的數據,我會設置屬性爲您在構造函數中,而不是覆蓋屬性本身想要的值。

public CustomMultiLineTextBox() 
{ 
    Rows = 5; 
    TextBoxMode = System.Web.UI.WebControls.TextBoxMode.MultiLine; 
    CssClass = "textboxStyle"; 
} 
+0

謝謝。完美工作。你知道爲什麼它必須在構造器中完成,而不是在過度纏身的屬性中? (就我所知,將來)。再次感謝。 – Seany84

+1

我不知道爲什麼重寫的行和TextBoxMode屬性爲你工作,而沒有通過標記或代碼文件中的其他地方設置它們 - AFAIK,他們只返回值,並沒有實際設置對象上的任何東西。 CssClass的getter做的是一樣的 - 只返回一個字面值而不引用對象上的任何東西。你需要在標記中調用CssClass的setter,你可以通過CssClass =「textboxStyle」來完成。 處理此問題的另一種方法是通過在屬性上設置DefaultValueAttribute。 – wonkim00

相關問題