5

Tengo un sitio web alojado en ASP.Net que muestra una lista de resultados como DataGrid o ASP.Net Repeater con paginación de resultados.¿Cómo detener el sitio web ASP.Net lanzando la excepción HttpUnhandledException mientras navega hacia adelante/atrás a través de una lista de elementos paginada?

Si se desplaza rápidamente por las páginas presionando las pestañas Anterior/Siguiente a veces se lanza una HttpUnhandledException y se procesa la página de depuración en lugar de la siguiente lista de resultados.

La pantalla de depuración es el siguiente:

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. 
    at System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) 
    at System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) 
    at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) 
    at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
    at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
    at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    --- End of inner exception stack trace --- 
    at System.Web.UI.Page.HandleError(Exception e) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest() 
    at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 
    at System.Web.UI.Page.ProcessRequest(HttpContext context) 
    at ASP.contacts_default_aspx.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

he encontrado referencia a un error de este tipo en http://blogs.msdn.com/amitsh/archive/2007/07/31/why-i-get-invalid-postback-or-callback-argument-errors.aspx

pero la solución recomendada es establecer como false, pero esto parece crear una seguridad agujero. Los comentarios recomiendan varias alternativas, pero todas parecen bastante complejas, ya que requieren agregar código a cada control DataGrid o Repeater utilizado en mi sitio.

¿Existe una solución más general que se pueda realizar sin sacrificar la seguridad?

Respuesta

9

Los campos ocultos en su página no se suministran en la devolución. Existen varios de estos campos, y generalmente se requieren para la "magia" que proporciona ASP.Net.

En su directiva de página puede poner enableEventValidation = false en su directiva de página para desactivarlo, however that may not be desirable.

You can move the write code to move the elements to the top of the page

Por último, estoy bastante seguro de este problema exacto Recientemente se fija en un Service Pack o en el punto 3.5.

- EDITAR -

simplemente he encontrado el ajuste: RenderAllHiddenFieldsAtTopOfForm

Según MSDN está soportado en las siguientes versiones: 3.5 SP1, 3.0 SP2, 2.0 SP2

Cuestiones relacionadas