Я использую UpdatePanel для заполнения индикатора выполнения всякий раз, когда выполняется функция на сервере. Пользователь сначала должен загрузить CSV-файл. Как только CSV-файл загружен и временно сохранен, пользователь нажимает другую кнопку (назовем ее «обновить и просматривать»), которая запускает ряд функций для очистки CSV-файла и преобразования его в JSON-файл. Некоторые CSV-файлы имеют большой размер, и трудно сказать, какую функцию выполняет CSV при запуске.
Однако проблема в том, что каждый раз, когда пользователь нажимает кнопку «обновить и просматривать», ничего не происходит. Я получаю сообщение об ошибке из консоли, что ссылка на объект не установлена на экземпляр объекта.
Так как моя кнопка находится за пределами UpdatePanel, я удостоверился, что установил в UpdatePanel. Я убедился, что EventName = "click". Для UpdatePanel я удостоверился, что мой UpdateMode = "Условный", так как я хочу, чтобы индикатор выполнения заполнялся только после завершения работы функции. Я установил свой ChildrenAsTriggers = "true" - не имеет значения, изменил ли я этот параметр на "false". Кнопка все еще не выполняла функции, которые я сделал. Кроме того, на своей странице aspx я убедился, что Async = "true". Я использую asp: AsyncPostBackTriggers, а не asp: PostBackTriggers. Интересно, была ли это проблема, но я не верю, что это потому, что я пытаюсь запустить бэкэнд в то же время, обновляя индикатор выполнения моего интерфейса. Ниже приведен пример кода из серверной части (vb) и пример кода из внешнего интерфейса.
Protected Sub BtnUpload_Click(sender As Object, e As EventArgs)
statusLabel.Text = ""
While statusLabel.Text = ""
statusLabel.Text = Test_CSV()
Try
loadbar.Style("width") = "10%"
updateP.Update()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
statusLabel.Text = Save_CSV()
statusLabel.Text = Create_tables("fileOne")
statusLabel.Text = Transfer_Tables("fileOne")
statusLabel.Text = Update_Tables("fileOne")
statusLabel.Text = Query_JSON()
End While
FileUploadControl.Enabled = False
BtnUpload.Enabled = False
FileUploadControl.Visible = False
BtnUpload.Visible = False
Response.Redirect("/summary/filesummary.aspx")
End Sub
<div class="row" style="padding-left: 0; padding-top: .5em;">
<div class="col-md-12">
<label class="file-upload">
<span id="selectcsv" runat="server">Select CSV File
<asp:FileUpload ID="FileUploadControl" runat="server"
onchange="document.getElementById('uploadText').style.display =
'block';showFile();document.getElementById('instruction').style.display =
'none';" CssClass="hidden" /></span>
</label>
</div>
</div>
<div class="row" style="margin-bottom: 1em;">
<div class="col-md-12">
<label class="file-upload" id="uploadText" style="display: none;">
<span>Update and view results</span>
<asp:Button runat="server" ID="BtnUpload" OnClick="BtnUpload_Click" CssClass="hidden"/>
</label>
<asp:Label CssClass="label" runat="server" ID="statusLabel"></asp:Label>
</div>
</div>
<asp:UpdatePanel id="updateP" runat="server" UpdateMode="Conditional"
ChildrenAsTriggers="false">
<ContentTemplate>
<div role="progressbar" class="progress-bar" id="loadbar"
style="width: 0%" aria-valuemin="0" aria-valuemax="100"
runat="server"></div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="BtnUpload"
EventName="click" runat="server"/>
</Triggers>
</asp:UpdatePanel>
Я поместил оператор try / catch, чтобы посмотреть, смогу ли я получить более подробное окно с ошибкой, но ничего не появилось. Я, по крайней мере, ожидал, что индикатор выполнения заполнит 10% (он основан на атрибуте style ширины. Я не показывал подробно ни один из классов css, но идея индикатора будет меняться при изменении ширины). Но опять ничего не произошло, у меня была ошибка, где
ссылка на объект не установлена для экземпляра объекта.
Ошибка возникает в строке 1 MAjax. Я не был уверен, что это значит.