5

J'ai un site hébergé ASP.Net qui affiche une liste de résultats en tant que DataGrid ou répéteur ASP.Net avec pagination des résultats.Comment arrêter le site Web ASP.Net en levant l'exception HttpUnhandledException lors de la navigation en avant/en arrière dans la liste d'articles paginée?

Si vous faites défiler rapidement les pages en appuyant sur les onglets Précédent/Suivant, une exception HttpUnhandledException est parfois générée et la page de débogage est affichée au lieu de la liste de résultats suivante.

L'écran de mise au point est la suivante:

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) 

J'ai trouvé référence à une telle erreur à http://blogs.msdn.com/amitsh/archive/2007/07/31/why-i-get-invalid-postback-or-callback-argument-errors.aspx

mais la solution préconisée est de mettre à faux, mais cela semble créer une sécurité trou. Les commentaires recommandent plusieurs alternatives, mais tous semblent assez complexes car ils nécessitent l'ajout de code à chaque contrôle DataGrid ou Repeater utilisé sur mon site.

Y at-il une solution plus générale qui peut être faite sans sacrifier la sécurité?

Répondre

9

Les champs masqués de votre page ne sont pas fournis en postback. Il existe plusieurs de ces champs, et ils sont généralement requis pour la 'magie' qu'offre ASP.Net.

Dans votre directive de page, vous pouvez mettre enableEventValidation = false dans votre directive de page pour le désactiver, however that may not be desirable.

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

Enfin, je suis assez certain que cette question précise a été récemment fixé dans un Service Pack ou 3.5.

- EDIT -

Je viens de découvrir le cadre: RenderAllHiddenFieldsAtTopOfForm

Selon MSDN est pris en charge dans les versions suivantes: 3.5 SP1, 3.0 SP2, 2.0 SP2

Questions connexes