Frage

Ich versuche ClientScriptManager.RegisterForEventValidation zu verwenden zu verwenden, um ein verstecktes Feld und Wert zu registrieren, die ich mit ClientScriptManager.RegisterHiddenField bin hinzufügen. Ich tue dies während des Render-Ereignisses. Ich bekomme keinen Fehler, aber ASP.NET 2.0 wird nicht angezeigt, das Feld Validierung zu sein. Ich kann den Wert ändern oder das gesamte Feld Clientside mit Firefox und Firebug löschen und ASP.NET nicht einen Fehler aus, wie es sollte.

Beispielcode aus einer benutzerdefinierten Seite Klasse:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

Das verborgene Feld wird auf der Seite hinzugefügt, aber ASP.NET nicht das Feld oder Wert auf Postbacks validieren. Was bin ich?

War es hilfreich?

Lösung

Ich verstehe, was Sie zu tun versuchen, aber das Ereignis Validation API ist nicht wirklich angemessen, da es für die Validierung, dass die Postbacks oder Callback-Ereignisse ausgelöst durch den Client korrekt ist für den Zielserver Steuerung vorgesehen ist, zum Beispiel dafür sorgen, dass ein Klick durch die richtige Taste behandelt wird oder die Überprüfung, dass ein Änderungsereignis auf einer Dropdown-Liste nicht für einen Wert, der ursprünglich nicht ‚bekannt‘ wurde auf den Server.

In Ihrem Code, generieren Sie ein verstecktes Feld direkt an den Client, so gibt es keine Kontrolle der Server auf einem Postbacks zu verweisen. Auch wenn Sie eine verstecktes Feld Steuerung auf der Serverseite verwendet wird, würden Sie noch nicht in der Lage sein, den Feldwert zu bestätigen, weil die Steuerung nicht Postback Ereignisse generiert (es gibt keine Möglichkeit für den Benutzer mit ihr zu interagieren, und somit auch keine Ereignisse für den Server zur Validierung).

Die einfachste Lösung ist Viewstate zu verwenden, um den Wert des Feldes zu speichern, dann auf Postbacks zu überprüfen, dass der entsandte Wert des Feldes den Wert in Viewstate gespeichert entspricht. Viewstate ist standardmäßig verschlüsselt, so dass es ein sicherer Ort ist, Daten zu speichern, die auf dem Client nicht ändern sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top