asp.net - ModalPopup、UpdatePanel、Javascript“预期对象”Internet Explorer 错误
问题描述
新的信息!我在下面描述的问题只发生在 Microsoft Internet Explorer 上。我测试的所有其他人的行为都应有尽有。甚至 Microsoft Edge 也处理得很好。很多人使用 IE,所以也许有人知道解决以下问题的方法:
我的 asp.net Web 应用程序中的一个页面有一个模式弹出窗口,其中包含一个必须动态填充的列表框。该页面包含一个树形视图控件;右键单击树视图上的节点调用上下文菜单;如果用户单击“添加预任务”,则会出现弹出表单,列出根据单击的节点而有所不同的项目。
该列表框包含在一个 UpdatePanel 中,该更新面板被插入以便可以在不重新发布整个页面的情况下填充列表。我开发了这个弹出窗口,对其进行了测试,它似乎工作正常。当我碰巧按了电脑键盘上的一个键时,我正在为自己做得很好而拍拍自己的后背。该应用程序崩溃并显示以下错误消息:
"Unhandled exception at line 1010, column 1 in http://localhost:55109/PPM/ScriptResource.axd?d=8GNeJYrV145FFZwe3zZTQTMdSqo5ZWiNHMcMCdX41b_dp65omt53usfcChKlDkhIbPdehfLSEKVkXbwQruOiDLDfxhVjDQZOQZDVfHxfkhrBY3rHZVHxg2I6VQGIFSKL2AhGUprc1gW7X0t1_Q79OAckMdH-JliDUkID4lzcsT8Bfkxn0&t=1e478eba
0x800a138f - JavaScript 运行时错误:预期对象”
这种行为是一致的。弹出窗口不会容忍任何击键。
几天来我一直在努力解决这个问题。感谢您提供的任何帮助。
这是相关的标记:
<a href="#" style="display:none;" onclick="javascript:return false" id="hidlinkAddPretask"
runat="server">dummy</a>
<cc1:ModalPopupExtender ID="mpePretask" runat="server" PopupControlID="pnlPretask" TargetControlID="hidlinkAddPretask"
CancelControlID="btnCancelPretask" ></cc1:ModalPopupExtender>
<asp:Panel ID="pnlPretask" runat="server" CssClass="popupPanel" Width="40%">
<asp:UpdatePanel ID="updPretask" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<!-- Panel within pnlPretask contains list of selected. -->
<asp:panel runat="server" ID="pnlPretaskList" Visible="false">
<asp:BulletedList ID="blPretasks" runat="server">
</asp:BulletedList>
</asp:panel>
<asp:HiddenField runat="server" ID="hidPostTaskID" Visible="true" />
Before <b>"<asp:Label ID="lblAddPretask" runat="server"></asp:Label>"</b> can be completed, I must:
<br /><br />
<asp:ListBox ID="lboxPretask" runat="server" Width="80%" Height="200px"
ToolTip="Select one or more tasks that must be completed before..." AutoPostBack="false"
SelectionMode="Multiple">
</asp:ListBox>
</ContentTemplate>
</asp:UpdatePanel>
<br /><br />
<asp:UpdateProgress ID="UpdateProgress4" runat="server" DisplayAfter="0">
<ProgressTemplate>
<img src="images/progress.gif" alt="" /> Updating...</ProgressTemplate>
</asp:UpdateProgress>
<asp:Label runat="server" ID="lblErrPretask" Font-Bold="True" ForeColor="Red" />
<br />
<asp:Button ID="btnAddAnotherPretask" runat="server" Text="Save and Add Another" />
<asp:Button ID="btnSavePretask" runat="server" Text="Save" />
<asp:Button ID="btnCancelPretask" runat="server" Text="Cancel" />
</asp:Panel>
弹出窗口是通过这个 vb 代码从服务器启动的:
Dim ID As String = e.NodeClicked.Attributes("TaskID").ToString
'Repopulate listbox
PretaskSelectList(ID)
updPretask.Update()
mpePretask.Show()
这个 vb 例程填充列表框:
Private Sub PretaskSelectList(ByVal TaskID As Integer)
Dim strConn As String = ConfigurationManager.ConnectionStrings("PPMConnectionString").ConnectionString
Dim cnn As SqlConnection = New SqlConnection(strConn)
cnn.Open()
'Get two result sets from uspPretaskPickList
Dim sql As String = "execute dbo.uspPretaskPickList " & TaskID.ToString
Dim cmd As SqlCommand = New SqlCommand(sql, cnn)
'Result set #1 - Tasks from current Goal
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim Itm As ListItem
With lboxPretask
.Enabled = True
.Items.Clear()
'Add a default item, #0
Itm = New ListItem("ADD NEW TASK", "0")
Itm.Attributes.Add("Style", "Font-Weight:Bold")
.Items.Add(Itm)
'Insert a separator if data reader has any records
Dim separator As New ListItem("-------------------------", "")
separator.Attributes.Add("disabled", "true")
If rdr.HasRows Then
.Items.Add(separator)
End If
'Add each member of 1st result set, using lboxPretask.Items.Add(New ListItem(TaskName, TaskID))
Do While rdr.Read
Itm = New ListItem(rdr("TaskName"), rdr("TaskID").ToString)
'Each item should be Bold.
Itm.Attributes.Add("Style", "Font-Weight:Bold")
.Items.Add(Itm)
Loop
'Add dividing line, Pretask.Items.Add("------------", "-1")
separator.Attributes.Add("disabled", "true")
.Items.Add(separator)
'Results set #2 - Tasks from other or no goal
rdr.NextResult()
'Add each member of 2nd result set, using lboxPretask.Items.Add(New ListItem(TaskName, TaskID))
Do While rdr.Read
Itm = New ListItem(rdr("TaskName"), rdr("TaskID").ToString)
.Items.Add(Itm)
Loop
End With
rdr.Close()
cnn.Close()
rdr = Nothing
cnn = Nothing
lboxPretask.ClearSelection()
End Sub
再次感谢您提供的任何见解。
解决方案
看起来您的 JS 文件没有在您的页面上正确引用。
您可以通过引用它来解决问题,如下所示。
<script type="text/javascript" src=<%# ResolveUrl("http://code.jquery.com/jquery-latest.min.js") %> ></script>
参考:
推荐阅读
- javascript - Javascript strptime() 增加了一个月
- python-3.x - cdk 警告没有向“PrivateSubnet1”处的子网提供 routeTableId
- r - 在 R 中,如何添加包含 ==x 的列中值的计数的行?
- vb.net - VB.NET 使用 SendKeys.Send
- hybris - 无法在 hybris 后台搜索目录
- java - 在Android中重新字符串化一个字符串
- python - 从python中的对象列表中获取最小值和最大值
- android - 父视图高度被忽略
- vba - 打开word文档时自动运行Word宏
- assembly - 如何在不创建新函数的情况下反转汇编中的堆栈