1

環境: .net 3.5、c#、sharepoint 2010

既存の機能: 検索テキスト ボックスと検索ボタンを備えたユーザー コントロールがあります。送信ボタンが押されると、検索結果とともに、検索キーワードを含むクエリ文字列が作成されます。ポストバック時に、テキスト ボックスにはクエリ文字列からの検索キーワードが再び入力されます。これはうまくいきます。

問題: クロスサイド スクリプティングを修正する必要があります。html.encode と ' で一重引用符をエスケープするフィルターも同様です。テキストボックスの値。しかし、テキストボックスには「'searchingstring'」のように値が表示されます。

ユーザーに「Searchstring」のみを表示する必要がありますが、ソースコードの値は 'searchingstring' である必要があります。クロス サイド スクリプトの脆弱性を防止します。

(注: 上記のテキスト「&」は実際には「&」です。&#39 ではありません。stackoverflow エディターはそれを単一引用符に変換するため、読み取り用に & に置き換えました)

stringbuilder を使用して pageinit でテキストボックスを動的に構築しようとすると、上記のように必要なものが得られます。例えば:

    StringBuilder sb = new StringBuilder();
    if (Request.QueryString["str"] != null)
        {

            string strName = Request.QueryString["str"].ToString();
            str_value = htmlCheckReturnData(strName ); //encoded string
            sb.Append("<INPUT type='TEXT' runat = 'server' id = 'mystring' value = '" + str_value + "' />");
            //    Response.Write(sb.ToString());

        }
        else
        {
            sb.Append("<INPUT type='TEXT' runat = 'server' id = 'mystring' value = '' />");
        }

        ltlSearch.Text = sb.ToString();

しかし、ページロード内の「mystring」テキストボックスの値を次のように確認する必要があります。

   if (!IsPostBack && !Page.IsAsync)
    {
      if (!string.IsNullOrEmpty(mystring.Value))  //NOT WORKING HOW TO GET the textbox value
      {
       //do something
      }
   }

注: stringbuilder 書き込みメソッドを使用せずに page_init でテキスト ボックス コントロールを作成すると、エンコーディング付きの文字がテキスト ボックスに表示されます。

何か助けはありますか?

ありがとうございます

4

1 に答える 1

0

HTML に文字列を追加しrunat="server"ても、サーバー コントロールにはなりません。次のように、page_init でコード ビハインドからコントロールを動的に追加する必要があります。

PlaceHolderコントロールを追加します。

<asp:PlaceHolder runat="server" ID="myPlaceHolder">
</asp:PlaceHolder>

Page_Init次に、イベントで次のコードを作成してTextBoxコントロールを作成します。

protected void Page_Init(object sender, EventArgs e)
{
    TextBox txt = new TextBox();
    txt.ID = "myTxt";
    myPlaceHolder.Controls.Add(txt);
}

Page_Load イベントからコントロールを取得するには:

TextBox txt = (TextBox)myPlaceHolder.FindControl("myTxt");

Textこれで、他のコントロールと同じようにプロパティにアクセスできます。

txt.Text

いくつかのこと。コントロールを動的に追加することは、時には苦痛な経験になる可能性があります。Asp.net は現在、このコントロールのビューステートを処理していません。そのため、達成しようとしていることに応じて、いくつかのエラーが発生する場合があります。このプロセスに役立つオンラインのチュートリアルがたくさんあります。

Visual Basic .NET を使用して ASP.NET でコントロールを動的に作成する

動的制御を真に理解する (パート 1)

プログラムによって ASP.NET Web ページにコントロールを追加する

于 2013-08-14T19:29:01.287 に答える