#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. Текст = «файл правильного формата: «; } }