2011-11-08 10 views
1

ユーザー入力HTMLタグを許可するカスタムTextBoxコントロールを作成する必要があります。 HtmlEnabledという新しいプロパティを追加しました。デフォルトはfalseです。 falseの場合、元のTextBoxとまったく同じように動作します。 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" %> 

これは、TextBoxコントロールとは何の関係もない、要求の検証をチェックし、すべてのページの入力(クエリ文字列パラメータ、クッキー、ヘッダ、およびフォームフィールドが)何の潜在的要求で悪意のあるスクリプトが存在しないことを確認します。それをオフにすることで、入力が自分自身に有害ではないことを確認する必要があることに注意してください。

関連する問題