Обратная передача asp.net до полной загрузки страницы приводит к тому, что выпадающий список имеет неправильное значение SelectedValue - PullRequest
2 голосов
/ 18 октября 2010

У нас были периодические отчеты, в которых значение набора DropDownBoxs в GridView будет сброшено до первого элемента значения в списке.

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

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

Ответы [ 2 ]

1 голос
/ 18 октября 2010

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

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

0 голосов
/ 29 августа 2012

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

Из журнала я мог видеть, что 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 на страницу и отправить его до полной загрузки.

<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);
}
...