Сохраняющаяся переменная после вызова AsyncFileUpload для OnUploadedComplete

Это странно. Итак, у меня есть загрузчик файлов Ajax Toolkit под названием AsyncFileUpload, расположенный на панели обновлений. Этот элемент управления AsyncFileUpload, как только вы кладете туда файл, начинает его загружать и звонит на сервер. Затем я сохраняю этот файл как BLOB и получаю идентификатор строки из таблицы базы данных, используя SELECT @@IDENTITY. Пока все хорошо, теперь у меня есть идентификатор строки, и я хочу его сохранить. Я поместил его в скрытое поле, но когда AsyncFileUpload вызывает OnClientUploadComplete, скрытое поле остается пустым! Поэтому я подумал: «Хорошо, я просто сохраню его в ViewState». К моему большому удивлению, произошло то же самое; состояние просмотра очищается. Наконец, мне удалось использовать переменную сеанса. Мой вопрос: почему переменная Session работает, а ViewState или HiddenField — нет?

ПЕРЕДНИЙ:

<script type="text/javascript">
    function UploadComplete(sender, args) {
        var fileSize = args.get_length();
        if (fileSize > 2000000) {
            alert("Logo size must be smaller than 2MB");
        }

        $("[id*=hfUploadSuccessful]").val("1");
        //Calls a postback and thus lvMembers_PreRender gets executed to get results
        __doPostBack('<%=UpdatePanel1.ClientID %>', null);
    }
</script>

                                    <div id="divClassFileUpload">
                                        <asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" Width="350" CssClass="FileUploadClass floatLeft"
                                            UploaderStyle="Modern"
                                            CompleteBackColor="Lime"
                                            ErrorBackColor="Red"
                                            ThrobberID="Throbber"
                                            UploadingBackColor="#66CCFF"
                                            OnClientUploadError="uploadError" 
                                            OnClientUploadStarted="StartUpload"
                                            OnClientUploadComplete="UploadComplete"
                                            OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
                                    </div>

НАЗАД:

    protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {

            //hfSelectedArticleId.Value = dt.Rows[0]["ArticleId"].ToString());
            //ViewState.Add("ArticleId", dt.Rows[0]["ArticleId"].ToString());
            Session.Add("ArticleId", dt.Rows[0]["ArticleId"].ToString());

        }

РЕДАКТИРОВАТЬ: Нашел аналогичный пост, который как бы объясняет это. Спасибо всем! Не получает значение в Viewstate в asp.net с использованием C#?


person Lukas    schedule 10.07.2013    source источник
comment
Вы забыли сделать поле статическим?   -  person aevitas    schedule 11.07.2013
comment
не уверен, что понимаю, не могли бы вы уточнить?   -  person Lukas    schedule 11.07.2013
comment
Ну, переменная, которой вы присваиваете значение, очевидно, не сохраняет свое значение после завершения операций. Вы присвоили его переменной Session, которая полностью не зависит от кода, который вы выполняете; поэтому сохраняется. Если бы вы где-то использовали поле static и присвоили его этому, оно должно сохранить свое значение независимо от того, завершит ли ваш код свое выполнение (и, возможно, впоследствии избавится от себя, кто знает?).   -  person aevitas    schedule 11.07.2013