CallBack никогда не заканчивается из-за этого кода -> Response.Redirect ("~ / Handler.ashx? Path =" + {Path}); - PullRequest
0 голосов
/ 12 октября 2011

У меня есть Handler.ashx в моем проекте для отображения диалога сохранения в виде для моих пользователей.
также у меня есть повторитель с кнопками ссылки внутри для щелчка и, наконец, отображается верхний диалог сохранения в виде диалога.
iпоместите мой репитер внутри панели обновлений!
коды ItemCommand этого ретранслятора, как показано ниже:

   protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            //The Below Line Does Not Work - Always Is Null
            //NewAddedFiles currentItem = (NewAddedFiles)e.Item.DataItem;

            HiddenField hfFilePath = (HiddenField)e.Item.FindControl("hfFilePath");
            HiddenField hfFileName = (HiddenField)e.Item.FindControl("hfFileName");
            HiddenField hfFileSize = (HiddenField)e.Item.FindControl("hfFileSize");
            HiddenField hfFileCreationDate = (HiddenField)e.Item.FindControl("hfFileCreationDate");

            switch (e.CommandName)
            {
                case "lbFile_Click":
                    {
                        if (Session["User_ID"] != null)
                        {
                            DataSet dsDownload = DataLayer.Download.Size_By_UserID_Today(int.Parse(HttpContext.Current.Session["User_ID"].ToString()), DateTime.Now);
                            if (dsDownload.Tables["Download"].Rows.Count > 0)
                            {
                                DataRow drDownload = dsDownload.Tables["Download"].Rows[0];

                                int SumOfFileSize4Today = int.Parse(drDownload["FileSizSum"].ToString());

                                if (SumOfFileSize4Today + int.Parse(hfFileSize.Value) <= 1073741824)//1 GB = 1024*1024*1024 bytes = 1073741824 bytes
                                //if (SumOfFileSize4Today + int.Parse(hfFileSize.Value) <= 100000)
                                {
                                    DataLayer.Download.InsertRow(
                                               int.Parse(HttpContext.Current.Session["User_ID"].ToString()),
                                               DateTime.Now,
                                               hfFilePath.Value,
                                               hfFileName.Value,
                                               hfFileSize.Value,
                                               DateTime.Parse(hfFileCreationDate.Value)
                                             );
                                    Response.Redirect("~/HandlerForRepeater.ashx?path=" + hfFilePath.Value);
                                }
                                else
                                {
                                    ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "YouCanNotDownloadAnyMore_SizeOverload", "YouCanNotDownloadAnyMore_SizeOverload();", true);
                                }
                            }
                            else
                            {
                                if (int.Parse(hfFileSize.Value) <= 1073741824)
                                //if (int.Parse(hfFileSize.Value) <= 100000)
                                {
                                    DataLayer.Download.InsertRow(
                                               int.Parse(HttpContext.Current.Session["User_ID"].ToString()),
                                               DateTime.Now,
                                               hfFilePath.Value,
                                               hfFileName.Value,
                                               hfFileSize.Value,
                                               DateTime.Parse(hfFileCreationDate.Value)
                                             );
                                    Response.Redirect("~/HandlerForRepeater.ashx?path=" + hfFilePath.Value);
                                }
                                else
                                {
                                    ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "YouCanNotDownloadAnyMore_SizeOverload", "YouCanNotDownloadAnyMore_SizeOverload();", true);
                                }
                            }
                        }
                        else
                        {
                            ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "plzLoginFirst_ForDownload", "plzLoginFirst_ForDownload();", true);
                        }
                        break;
                    }

                default:
                    {
                        break;
                    }
            }
        }
    }

важная часть этого кода:

 Response.Redirect("~/HandlerForRepeater.ashx?path=" + hfFilePath.Value);  

из-заобратный вызов этой строки никогда не заканчивается, и когда появляется диалоговое окно «Сохранить как», область повторителя переходит в режим Thinkink и отключается!

как я могу исправить эту проблему?

1 Ответ

1 голос
/ 12 октября 2011

Я не совсем знаком с UpdatePanels, но я думаю, что вы в значительной степени ответили на это сами, когда говорите, что «обратный вызов никогда не заканчивается, и когда появляется диалоговое окно« Сохранить как », область повторителя переходит в режим мышления и отключается».

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

Можно рассмотреть два варианта:

  1. Вместо этого или перенаправьте на ваш обработчик, чтобы ответ продолжался как обычно, и вместо этого зарегистрируйте скрипт, чтобы сделать запрос к вашему обработчику асинхронно, передав ему путь к файлу.
  2. Использование jQuery для асинхронного вызова веб-метода с помощью метода ajax.
...