0

在我的 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 可以解决此问题,但这不是一个选项。还有其他解决方案可以阻止这种转换吗?

4

1 回答 1

0

能够通过单击带有 href 的链接而不是单击链接来解决此问题,将它们更改为在父页面中调用 javascript 函数,这会更改 iframe 的 src,并且逗号不会以这种方式转换。

于 2013-01-18T19:46:00.403 回答