Недопустимая ошибка ViewState в Firefox при включенном EnabledEventValidation
У меня есть стабильная ошибка, которая воспроизводится каждый раз, когда я нажимаю F5:
Есть 2 сетки (master-detail), и на самом деле ошибка возникает при обратном вызове, который вызывается моим клиентским кодом, когда происходит изменение фокусированной строки в основной сетке. Что-то вроде этого:
this.mainGrid.ClientSideEvents.FocusedRowChanged = string.Format(@"
function(s, e)
{{
if (typeof({0}) != 'undefined')
{0}.PerformCallback(s.GetFocusedRowIndex());
}}",
this.detailsGrid.ClientInstanceName);
Ошибка воспроизводится только в Mozilla Firefox! (да, IE не под вопросом, это довольно странно =))
И очень важная вещь: ошибка воспроизводится только при включенной проверке события, то есть:
... EnableEventValidation="false" %> // no error in this case
Я предположил, что причина в том, что обратный вызов срабатывает до загрузки необходимых полей (как я понял, проверка события использует некоторые скрытые поля), поэтому я проверил это, используя setTimeout
:
this.mainGrid.ClientSideEvents.FocusedRowChanged = string.Format(@"
function(s, e)
{{
window.setTimeout(function () {{
if (typeof({0}) != 'undefined') {0}.PerformCallback(s.GetFocusedRowIndex());
}}, 2000);
}}",
this.detailsGrid.ClientInstanceName);
Но Тат не помогла. Проходит 2 секунды, начинается обратный вызов, и я получаю сообщение об ошибке. Это происходит только при обновлении - при первой загрузке страницы ошибка не возникает. Отключение кеша строк для сетки также не помогло. Нужна помощь! знак равно
Изменить: вот StackTrace
at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
at System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded()
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.HiddenField.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.WebControls.HiddenField.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
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.solutions_cashcenter_stockmanagement_frames_takeintostorageordersviewframe_aspx.ProcessRequest(HttpContext context) in c:\Users\udod\AppData\Local\Temp\Temporary ASP.NET Files\website\b07be668\e534e3ef\App_Web_jeqyhxze.10.cs:line 0
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Edit2: 'EnsureEventValidationFieldLoaded' - да, я вижу этот момент, но... как он может не загружаться, если я жду 2 секунды???
Edit3: вы можете заметить, что это не проблема IIS (127.0.0.1 ip на скриншоте).
Редактировать: UP!!!
1 ответ
Вчера я столкнулся с той же ошибкой и обнаружил похожую проблему здесь: http://sietch.net/ViewNewsItem.aspx?NewsItemID=185
мой текущий обходной путь:
$(document).ready(function(){
$('#__EVENTVALIDATION').attr('autocomplete', 'off');
});
это похоже на работу. Но я все еще тестирую.