2009-06-25 38 views
1

安裝程序:具有大量TextBox控件的Web窗體。ASP.NET - 啓用時交換文本框標籤= False

當我將TextBox控件的Enabled屬性中的任何一個設置爲False時,我想在運行時將TextBox「交換」出標籤。這裏的想法是,只要它是隻讀的,不要將其顯示在專爲編輯而設計的控件中。

我在想這應該是非常簡單和可重複使用的,但是最好的方法是什麼?

回答

3

不知道它的最好的方式,我會做一個自定義服務器控件是一個文本框,

然後重寫Render方法,檢查它是否是隻讀的,

如果讀它才使你的像標籤控件一樣的span標籤。

如果沒有的話讓基(文本)呈現接管......

public class SpecialTextbox : TextBox 
{ 
    public override void RenderControl(HtmlTextWriter writer) 
    { 
     if (!this.ReadOnly) 
     { 
      base.RenderControl(writer); 
     } 
     else 
     { 
      writer.Write(string.Format("<span id=\"{0}\" class=\"{1}\">{2}</span>", 
          this.ClientID, 
          this.CssClass, 
          this.Text)); 
     } 
    } 
} 
+0

你可以交換「跨度」爲「標籤」,如果你想和 – BigBlondeViking 2009-06-26 17:36:26

2

一種可能的解決方案是創建一個擴展TextBox的新控件。然後,您的專用控件將覆蓋渲染代碼的一部分,導致控件在ReadOnly = true時呈現類似於標籤。

+0

我喜歡他們的方式,你覺得... – BigBlondeViking 2009-06-25 21:25:51

2

另一種方法是尋找到使用控制適配器。你基本上可以做到與BigBlondeViking建議的完全相同的事情,但是你可以在代碼中使用常規的asp:textbox控件。這對你和其他開發者來說會容易得多。

About control adapters