2011-11-08 83 views
1

我需要創建一個允許用戶輸入HTML標籤的自定義TextBox控件。我添加了一個名爲HtmlEnabled的新屬性,默認爲false。如果它是錯誤的,它將完全像原始文本框一樣;如果它設置爲true,它將調用Server.HtmlEncode來對文本進行編碼。我從來沒有創建一個自定義控件,任何人都可以告訴我我需要做什麼?我需要重寫什麼函數?謝謝。如何創建派生的TextBox控件?

我創建了我的TextBoxEx類,如下所示:我將HtmlEnabled設置爲true時仍然出現驗證錯誤,有人可以告訴我什麼是錯誤的嗎?

namespace WebApplication1 
{ 
    [ToolboxData("<{0}:TextBoxEx runat=server></{0}:TextBoxEx")] 
    public class TextBoxEx : System.Web.UI.WebControls.TextBox 
    { 
     public bool HtmlEnabled 
     { 
      get 
      { 
       return (bool)ViewState["HtmlEnabled"]; 
      } 
      set 
      { 
       ViewState["HtmlEnabled"] = value; 
      } 
     } 

     public TextBoxEx() 
     { 
      ViewState["HtmlEnabled"] = false; 
     } 

     public override string Text 
     { 
      get 
      { 
       if (HtmlEnabled) 
        return HttpUtility.HtmlEncode(base.Text); 
       else return base.Text; 
      } 

      set 
      { 
       if (HtmlEnabled) 
        base.Text = HttpUtility.HtmlDecode(value); 
       else base.Text = value; 
      } 
     } 


    } 
} 
+0

這是一個很好的參考http://dotnetguts.blogspot.com/2007/09/web-user-control-in-aspnet.html –

回答

0

聽起來像你可以從TextBox控件繼承並重寫Text屬性。這篇文章應該讓你如何去這樣做開始:

http://www.4guysfromrolla.com/articles/100103-1.aspx

+1

這就是我所嘗試過的。但是當我將HtmlEnabled設置爲true時,我仍然遇到驗證錯誤。你知道我做錯了嗎? – GLP

0

爲了讓頁面接受HTML標記,你需要禁用請求驗證。

<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="MyNamespace.TestPage" %> 

這有什麼好做的文本框控件,請求驗證檢查所有頁面輸入(查詢字符串參數,餅乾,標題和表單字段),以確保不存在任何潛在的在請求惡意腳本。請注意,通過關閉它,您將需要驗證輸入是否自己無害。

相關問題