在我的 asp.net 应用程序(后面的 vb 代码)中,我有一个页面,右侧有一个 iframe。页面左侧(将这里称为父页面,iframe将是iframe)有几个表格,当单击某些单元格时,它会使用javascript更改iframe的src以显示里面的详细帐户他们点击的条目的 iframe。在顶部的 iframe 内,有一个面包屑路径,显示必须遵循的条目才能到达此条目(它有点像一棵树,有不同级别的条目,下面的每个条目都链接到父条目上等)。这些链接只是使用 VB 端的函数创建的简单 html 链接。我的问题是,当我单击父页面中的条目时,一切都正确加载,但是当我单击 iframe 中面包屑路径中的链接时 - 将鼠标滚动到某些图像上时,处理鼠标悬停的 javascript 函数出现错误。两种方式(更改 src 或单击框架中的链接)都调用相同的页面和函数。我相信我已经找到了问题 - 从父窗口单击时 - 鼠标悬停的 javascript 调用看起来像这样。
onmouseover="imgOv(this, '../images/modify.gif')"
单击 iframe 中的链接时,鼠标悬停看起来像这样。
onmouseover="imgOv(this, '../images/level_over.gif')"
这是生成此 html 的代码。谁能看到为什么我的单引号变成了 ' 而不是像更改框架 src 时那样的引号?
编码:
这是 navSpot - 详细信息页面中的占位符。这里的信息是从另一个 VB 库加载的
<asp:PlaceHolder id="NavSpot" Runat="server"></asp:PlaceHolder>
加载详情页(详情页是iframe中的页面,如果从父级点击,框架的src会变成详情页,如果从链接点击,它只是使用href调用页面)。这是处理 navSpot 的代码
Dim myCtrl As UserControl = LoadControl("../include/NavDetailScreens.ascx")
myCtrl.ID = "navControl"
NavSpot.Controls.Add(myCtrl)
这是调用 NavDetailScreens.ascx 时调用的函数 - 我很肯定将相同的确切参数传递到 SP,并且更改 src 或单击 iframe 中已有的链接没有区别(在关于用于存储过程的参数)。错误部分似乎在最后,特别是在子末尾的三行,在以“If DS.Item("activity_enable") = 1 Then”开头的 if 内 - 似乎这是单曲的时候引号变成了 & # 39; (使用空格,因此它不会自动调整为单引号 - JS 函数中的实际字符串中没有空格)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
If Request.QueryString("standalone") <> "true" Then
Dim strConn As String
strConn = WebConfigurationManager.AppSettings.Item("ConnectionString")
Dim objConn As SqlConnection
objConn = New SqlConnection(strConn)
Dim myCmd As SqlCommand
myCmd = New SqlCommand
myCmd.Connection = objConn
myCmd.CommandType = CommandType.StoredProcedure
myCmd.CommandText = "SPNavigation"
Dim lnChildCat As Integer
Dim prmEntityID As New SqlParameter("@entityID", SqlDbType.BigInt)
prmEntityID.Value = Request.QueryString("taskgrpid")
Dim prmEntityCat As New SqlParameter("@entityCat", SqlDbType.Int)
If Request.QueryString("taskgrpid") = "" Then
prmEntityCat.Value = 35
lnChildCat = 26
prmEntityID.Value = DBNull.Value
ElseIf Request.QueryString("taskgrpcategory") = Request.QueryString("ptaskgrpcategory") Then
If Request.QueryString("taskgrpcategory") = 26 Then
prmEntityCat.Value = 34
lnChildCat = 34
ElseIf Request.QueryString("taskgrpcategory") = 10 Then
prmEntityCat.Value = 11
lnChildCat = 11
ElseIf Request.QueryString("taskgrpcategory") = 11 Then
prmEntityCat.Value = 12
lnChildCat = 12
ElseIf Request.QueryString("taskgrpcategory") = 12 Then
prmEntityCat.Value = 13
lnChildCat = 13
ElseIf Request.QueryString("taskgrpcategory") = 35 Then
prmEntityCat.Value = 35
lnChildCat = 26
ElseIf Request.QueryString("taskgrpcategory") = 34 Then
prmEntityCat.Value = 10
lnChildCat = 11
End If
Else
If Request.QueryString("taskgrpcategory") = 26 Then
prmEntityCat.Value = 26
lnChildCat = 34
Else
prmEntityCat.Value = Request.QueryString("taskgrpcategory")
lnChildCat = Request.QueryString("taskgrpcategory")
End If
End If
Dim prmIsMilestone As New SqlParameter("@isMilestone", SqlDbType.Int)
If Request.QueryString("milestone") = "true" Then
prmIsMilestone.Value = 1
Else
prmIsMilestone.Value = 0
End If
Dim prmResID As New SqlParameter("@resid", SqlDbType.Int)
prmResID.Value = Session.Item("user_id")
myCmd.Parameters.Add(prmEntityID)
myCmd.Parameters.Add(prmEntityCat)
myCmd.Parameters.Add(prmResID)
myCmd.Parameters.Add(prmIsMilestone)
Dim DS As SqlDataReader
objConn.Open()
DS = myCmd.ExecuteReader
Dim objRow As TableRow
objRow = New TableRow
Dim objCell As TableCell
Dim lc As LiteralControl
Dim dynImg As Image
While DS.Read
objCell = New TableCell
lc = New LiteralControl
lc.Text = "<br>" & DS.Item("act_name")
dynImg = New Image
If Request.QueryString("mode") = "create" Then
If IsDBNull(DS.Item("act_frm_params")) = False Then
If Request.QueryString("milestone") = "true" Then
If DS.Item("act_frm_params") = "&mode=create&milestone=true" And CInt(lnChildCat) = CInt(DS.Item("act_task_category")) Then
dynImg.ImageUrl = DS.Item("act_img_name_edit")
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
Else
If DS.Item("act_frm_params") = "&mode=create" And CInt(lnChildCat) = CInt(DS.Item("act_task_category")) Then
dynImg.ImageUrl = DS.Item("act_img_name_edit")
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
End If
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
ElseIf Request.QueryString("mode") = "edit" Then
If IsDBNull(DS.Item("act_frm_params")) = False Then
If Request.QueryString("milestone") = "true" Then
If DS.Item("act_frm_params") = "&mode=edit&milestone=true" Then
dynImg.ImageUrl = DS.Item("act_img_name_edit")
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
Else
If DS.Item("act_frm_params") = "&mode=edit" And CInt(Request.QueryString("taskgrpcategory")) = CInt(DS.Item("act_task_category")) Then
dynImg.ImageUrl = DS.Item("act_img_name_edit")
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
End If
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
Else
If DS.Item("activity_enable") = 1 Then
dynImg.ImageUrl = DS.Item("act_img_name")
dynImg.Style.Add("cursor", "hand")
dynImg.Attributes.Add("onmouseover", "imgOv(this, '" & DS.Item("act_img_name_over") & "')")
dynImg.Attributes.Add("onmouseout", "imgOu(this, '" & DS.Item("act_img_name") & "')")
dynImg.Attributes.Add("onclick", "imgclick('" & DS.Item("act_frm_name") & "', '" & DS.Item("act_frm_params") & "" & "', " & DS.Item("act_task_category") & ")")
Else
dynImg.ImageUrl = DS.Item("act_img_name_disabled")
End If
End If
objCell.Controls.Add(dynImg)
objCell.Controls.Add(lc)
objCell.CssClass = "infotext2"
objCell.VerticalAlign = VerticalAlign.Top
objCell.Width = Unit.Pixel(50)
objRow.Cells.Add(objCell)
End While
DS.Close()
objConn.Close()
tlbNav.Rows.Add(objRow)
End If
End Sub
再次感谢你的帮助。
编辑:将单引号更改为常规引号时,它们被替换为 & quote 而不是 & # 39 - 所以这不是一个解决方案。
编辑 2:似乎这是 .net 4.0 和安全更新的原因 - 回滚到 3.5 可以解决此问题,但这不是一个选项。还有其他解决方案可以阻止这种转换吗?