5

У меня есть веб-сайт ASP.Net, который отображает список результатов как ретранслятор DataGrid или ASP.Net с поиском результатов.Как остановить веб-сайт ASP.Net, перебрасывая исключение HttpUnhandledException во время просмотра вперед/назад через выгружаемый список элементов?

Если вы быстро прокручиваете страницы, нажимая вкладки «Предыдущий/Следующий», иногда вызывается исключение HttpUnhandledException и выводится страница отладки вместо следующего списка результатов.

экрана отладки выглядит следующим образом:

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) 

Я нашел ссылку на такую ​​ошибку в http://blogs.msdn.com/amitsh/archive/2007/07/31/why-i-get-invalid-postback-or-callback-argument-errors.aspx

но решение рекомендуется, чтобы установить ложь, но это, кажется, создает безопасность дыра. Комментарии рекомендуют несколько альтернатив, но все они кажутся довольно сложными, поскольку они требуют добавления кода для каждого элемента управления DataGrid или Repeater, используемого на моем сайте.

Есть ли более общее решение, которое можно сделать, не жертвуя безопасностью?

ответ

9

Спрятать поля как отправную запись. Существует несколько таких полей, и они обычно требуются для «магии», которую предоставляет ASP.Net.

В директиве вашей страницы вы можете поместить enableEventValidation = false в свою директиву страницы, чтобы отключить ее, however that may not be desirable.

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

Наконец, я довольно уверен, что это точный вопрос был недавно зафиксирован в пакет обновления или 3.5.

- EDIT -

Я только что нашел настройки: RenderAllHiddenFieldsAtTopOfForm

Согласно MSDN поддерживается в следующих версиях: 3.5 SP1, 3.0 SP2, 2.0 SP2