5

Ich habe eine ASP.Net gehostete Website, die eine Liste der Ergebnisse als DataGrid oder ASP.Net Repeater mit Paging der Ergebnisse anzeigt.Wie man die ASP.Net Web site stoppt, die HttpUnhandledExceptionAusnahme wirft, während vorwärts/rückwärts durch paged Liste der Einzelteile durchsuchend?

Wenn man schnell durch die Seiten blättert, indem man die Previous/Next Tabs drückt, wird manchmal eine HttpUnhandledException geworfen und die Debug-Seite gerendert statt der nächsten Auflistung der Ergebnisse.

Das Debug-Fenster ist wie folgt:

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) 

ich Bezug auf einen solchen Fehler bei http://blogs.msdn.com/amitsh/archive/2007/07/31/why-i-get-invalid-postback-or-callback-argument-errors.aspx

aber die empfohlene Lösung gefunden haben, ist auf false gesetzt, aber dies scheint eine Sicherheit zu schaffen Loch. Die Kommentare empfehlen mehrere Alternativen, aber alle scheinen ziemlich komplex zu sein, da sie das Hinzufügen von Code zu jedem einzelnen DataGrid- oder Repeater-Steuerelement erfordern, das auf meiner Site verwendet wird.

Gibt es eine allgemeinere Lösung, die ohne Sicherheitseinbußen durchgeführt werden kann?

Antwort

9

Die ausgeblendeten Felder auf Ihrer Seite werden beim Postback nicht bereitgestellt. Es gibt mehrere dieser Felder, die normalerweise für die "Magie" von ASP.Net benötigt werden.

In Ihrer Seitendirektive können Sie enableEventValidation = false setzen, um es auszuschalten, however that may not be desirable.

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

Schließlich bin ich ziemlich sicher, genau dieses Problem vor kurzem in einem Service Pack behoben wurde oder in 3.5.

- EDIT -

ich die Einstellung gerade gefunden: RenderAllHiddenFieldsAtTopOfForm

Laut MSDN unterstützt wird in den folgenden Versionen: 3.5 SP1, 3.0 SP2, 2.0 SP2