2011-01-02 11 views
1

私はGridViewを持っており、HTMLコードを挿入するデータを更新する必要があります。私はこのデータを要求に応じて符号化してデコードする必要があります。パスリクエストの検証方法

ページレベルでも「要求の検証」をグローバルに無効にすることはできないため、コントロールレベルで「要求の検証」を無効にするソリューションが必要です。

現在のところ、Html.Encodeの値を更新する必要があるスクリプトを使用していますが、「Request Validation」がイベントRowUpdatingの前にジョブを開始していると思われるため、「ページAは潜在的に危険なRequest.Formです。 .. "

どのように解決するか?

おかげ

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     foreach (DictionaryEntry entry in e.NewValues) 
     { 

      e.NewValues[entry.Key] = Server.HtmlEncode(entry.Value.ToString()); 

     } 

PS I使用Wwebはsubmiting前にすべての入力フィールドの値を符号化すると、サーバー側でこれらのフィールドの値をデコードするスクリプトを登録するためのMVC

答えて

1

使用方法RegisterOnSubmitStatementを制御します。単純なテキストボックスまたは非表示フィールドコントロールの

string script = String.Format("var inputs = $get('{0}').getElementsByTagName('input');" + 
    "for(var i = 0; i < inputs.length; i++) " + 
    "inputs[i].value = encodeURIComponent(inputs[i].value);", this.ClientID); 
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "onsubmit", script); 
1

、コントロールのIDが__(2つの下線)から始まるならば、要求の検証は、これらのコントロールのためにスキップされます。私はこれを使って私のページ全体とサイトを保護し、それを1つのコントロールでバイパスしました。しかしこれは公式な方法ではないので、将来の.netリリースで変更される可能性があります。