2011-01-02 3 views
1

Ich habe eine GridView und ich muss einige Daten aktualisieren HTML Code einfügen; Ich müsste diese Daten auf Anfrage verschlüsselt gespeichert und entschlüsselt haben.So umgehen Sie Request Validation

Ich kann in keiner Weise global "Request Validation" und nicht einmal auf Seitenebene deaktivieren, also würde ich eine Lösung benötigen, um "Request Validation" auf Control Level zu deaktivieren.

Im Moment verwende ich ein Skript, das Html.Encode jeden Wert updaten sollte, scheint Butt, dass "Request Validation" seinen Job vor dem Ereignis RowUpdating starten, so bekomme ich den Fehler "Seite Eine potenziell gefährliche Request.Form. .. ".

Irgendeine Idee, wie man es löst?

Dank

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

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

     } 

PS Ich benutze Wweb Kontrollen nicht MVC

Antwort

1

Verwenden Sie die Methode RegisterOnSubmitStatement Skript zu registrieren, die Werte aller Eingabefelder vor submiting und dekodieren Werte dieser Felder auf Server-Seite codieren.

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

Für einfache Textbox oder versteckten Feld steuert, wenn die ID der Steuerung mit __ (zwei Unterstrichen) beginnt dann wird die Anforderung Validierung für diese Kontrollen übersprungen. Ich benutzte dies, um meine ganze Seite und Seite zu schützen, aber umgangen für eine Kontrolle. Dies ist jedoch kein offizieller Weg, daher kann es in zukünftigen .net-Versionen geändert werden.