Pregunta

Estoy tratando de utilizar a utilizar ClientScriptManager.RegisterForEventValidation registrar un campo oculto y el valor que estoy añadiendo con ClientScriptManager.RegisterHiddenField. Haciendo esto durante el evento render. No me sale error, pero ASP.NET 2.0 no parece ser la validación del campo. Puedo cambiar el valor o eliminar toda la clientside campo usando Firefox y Firebug, y ASP.NET no generará un error como debería.

El código de ejemplo de una clase personalizada Página:

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

El campo oculto se agrega a la página, pero ASP.NET no valida el campo o el valor de devolución de datos. ¿Qué me falta?

¿Fue útil?

Solución

Yo entiendo lo que usted está tratando de hacer, pero utilizando la API de eventos de validación no es realmente el caso, ya que se pretende para la validación de que los eventos de devolución o de devolución de llamada planteadas por el cliente son correctos para el control del servidor de destino, por ejemplo, asegurándose que un clic es manejado por el botón correcto, o la comprobación de que un evento de cambio en una lista desplegable no es para un valor que no fue originalmente 'conocido' en el servidor.

En el código, están generando un campo oculto directamente al cliente, por lo que no hay control para que el servidor de referencia sobre una devolución de datos. Incluso si se ha utilizado un control de campo oculto en la página del servidor, todavía no sería capaz de validar el valor del campo porque el control no genera eventos de devolución (no hay manera para que el usuario interactúe con ella, y por lo tanto no se eventos para el servidor para validar).

La solución más sencilla es utilizar ViewState para almacenar el valor del campo, luego de devolución de datos compruebe que el valor publicado del campo es igual al valor almacenado en ViewState. ViewState está cifrado por defecto, así que es un lugar seguro para almacenar datos que no deben cambiar en el cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top