2010-10-18 2 views
2

У нас были случайные отчеты, в которых значение набора DropDownBoxs в GridView будет сброшено до первого элемента значения в списке.asp.net postback до того, как страница полностью загружена. Dropdownlist имеет неправильный SelectedValue

Мы наконец-то отследили его до проблемы с синхронизацией, когда пользователь нажимал кнопку «Сохранить» до того, как страница закончила рендеринг/загрузку данных, и мы можем воспроизвести ее на рабочем сервере, но не локально, потому что страница загружается слишком быстро.

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

+0

Как устанавливается выпадающий список SelectedValue? Если это делается на стороне сервера, ответ сервера на исходный запрос должен быть html, который отмечает соответствующий элемент как выбранный независимо от того, как скоро пользователь что-либо сделает. – jelbourn

+0

Он устанавливается serveride, который является запутанной частью. Я думаю, это потому, что DOM не полностью загружен. На данный момент страница по-прежнему загружается. – Davy8

ответ

1

думал о включении кнопки сохранения только в том случае, если страница загружена?

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

0

У меня была такая же проблема. Работал нормально на местном уровне, но случайный пользователь производства каким-то образом представлял страницу с частичными данными формы.

Из журнала я мог видеть, что HttpRequestFormVariables выглядел нормально до точки, а затем значения стали пустыми, в результате чего сайт выбрасывал необработанное исключение.

ctl00 $ MainContentPlaceHolder $ Foo $ rptForm $ CTL01 $ txtFormFieldId = 3815 ctl00 $ MainContentPlaceHolder $ Foo $ rptForm $ ctl02 $ txtFormFieldId = 3816 ctl00 $ MainContentPlaceHolder $ Foo $ rptForm $ ctl03 $ txtFormFieldId = 3817 ctl00 $ MainContentPlaceHolder $ Foo $ rptForm $ ctl04 $ txtFormFieldId = 3818 ctl00 $ MainContentPlaceHolder $ Foo $ rptForm $ ctl05 $ txtFormFieldId = ctl00 $ MainContentPlaceHolder $ Foo $ rptForm $ ctl05 $ txtFormFieldId =

единственный способ, которым я был способный воспроизводить его, заключается в добавлении некоторого Javascript в th e, чтобы отправить его до полной загрузки.

<script type="text/javascript"> 
    $("input[id$='btnSubmit']").click(); 
</script> 

Я подозреваю, что мне нужно будет отправить btnSubmit с сервера в отключенном состоянии, а затем включите его с Javascript после страницы завершения загрузки.

if (btnSubmit.Enabled) 
{ 
     btnSubmit.Enabled = false; 
     string script = "$(document).ready(function() {$(\"input[id$='" + btnSubmit.ClientID + "']\").removeAttr('disabled');});"; 
     this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "EnableSubmitButton", script, true); 
} 
Смежные вопросы