Ajax AsyncFileUpload запускает код сервера, но не обновляет веб-страницу клиента

#c# #asp.net #ajax

#c# #asp.net #ajax

Вопрос:

У меня есть элемент управления asyncfileupload внутри панели обновления. Файл успешно загружается и запускает правильный код на стороне сервера. Код на сервере выполняется, как и ожидалось, однако одна строка в коде сервера изменяет текст на ярлыке. Я просматриваю код в режиме отладки, и строка выполняется, но никаких изменений на странице не вносится.

Вот часть кода:

 <asp:UpdatePanel runat="server" ID="updater" > 
    <ContentTemplate> 
        <asp:AsyncFileUpload ID="fileUpload" runat="server" OnUploadedComplete="FileUploadComplete" /> 
        <asp:Label ID="AsyncText" runat="server" Text="File Type not checked" />  
    </ContentTemplate> 
</asp:UpdatePanel> 
  
 public void FileUploadComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
{ 
    System.Threading.Thread.Sleep(500); 
    if(fileUpload.HasFile) { AsyncText.Text = "file of correct format: "; } 
}
  

Может ли кто-нибудь помочь мне в решении этой проблемы или предложить другое решение??

Спасибо

Комментарии:

1. Можете ли вы вставить какой-нибудь код?

2. Код, который я использую: Client: <asp: UpdatePanel runat=»server» ID=»updater» > <ContentTemplate> <asp:AsyncFileUpload ID=»FileUpload» runat=»server» OnUploadedComplete=»FileUploadComplete» />=»Тип файла не проверен» /> </ContentTemplate> </asp:UpdatePanel> сервер: public void FileUploadComplete(отправитель объекта, AjaxControlToolkit. AsyncFileUploadEventArgs e) { System. Многопоточность. Нитки. Sleep(500); если(FileUpload. HasFile) { AsyncText. Текст = «файл правильного формата: «; } }

Ответ №1:

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

 if (Page.IsPostBack)
{
    if (Request.Files.Count > 0)
    {
        AsyncText.Text = "file of correct format";
        ListItem item = new ListItem("item to add");
        lb.Items.Add(item);
    }
}
  

Это позволяло мне устанавливать текст метки, но все равно ничего не менялось, пока я не нажал на случайную кнопку, которую я добавил на страницу. У этой кнопки даже не было события в коде, но этого было достаточно, чтобы вызвать обычную обратную отправку, а текст метки и элемент списка были успешно обновлены / добавлены в список. С учетом сказанного я бы подождал обновления любых меток, пока пользователь не нажмет кнопку загрузки, используя отдельную кнопку загрузки. (т.е. используйте AsyFileUplaod, чтобы получить его в браузере, но другую кнопку, чтобы сохранить файл на сервере). Вы всегда можете выполнить оценку файлов в событии нажатия кнопки, сославшись на опубликованные файлы на веб-страницу, как я сделал в приведенном выше коде.

В некоторых других примерах, которые я нашел в Интернете, использовался javascript для изменения текста метки, который также хорошо работает. Что-то вроде этого:

 string message = "";
if (e.StatusMessage == "Success")
{
   message = "File upload successful;";
}
else
{
   message = "File did not upload successfully;";
}
ClientScript.RegisterStartupScript(this.GetType(), "akey", "document.getElementByID('label').value ="   message, true);
  

Другой пример: здесь

Я думаю, что в данном случае это просто характер элемента управления, и единственный способ добиться того, чего вы хотите, — это немного творческого мышления. Если у вас есть какие-либо другие вопросы по поводу всего, что я перечислил здесь, не стесняйтесь спрашивать.

Удачи!

Ответ №2:

Где расположена метка, внутри или снаружи панели обновления? Похоже, что частичное обновление страницы может не включать обновление текста метки. Я бы сказал, что перемещение метки является самым простым предложением, но вы также можете попробовать что-то вроде RegisterStartupScript, который изменит текст метки с помощью javascript. Это все равно должно дать вам контроль на стороне сервера над тем, какой текст отображать, в зависимости от того, что происходит во время загрузки.

Если бы вы могли опубликовать какой-нибудь код, это было бы здорово.

Комментарии:

1. Код, который я использую: Client: <asp: UpdatePanel runat=»server» ID=»updater» > <ContentTemplate> <asp:AsyncFileUpload ID=»FileUpload» runat=»server» OnUploadedComplete=»FileUploadComplete» />=»Тип файла не проверен» /> </ContentTemplate> </asp:UpdatePanel> сервер: public void FileUploadComplete(отправитель объекта, AjaxControlToolkit. AsyncFileUploadEventArgs e) { System. Многопоточность. Нитки. Sleep(500); если(FileUpload. HasFile) { AsyncText. Текст = «файл правильного формата: «; } }