asp.netアプリケーション(vbコードビハインド)に、右側にiframeがあるページがあります。ページの左側(これを親ページと呼びます。iframeはiframeになります)にはいくつかのテーブルがあり、特定のセルをクリックすると、javascriptを使用してiframeのsrcが変更され、内部に詳細なアカウントが表示されます。クリックしたエントリのiframe。上部のiframe内には、このエントリに到達するためにたどる必要のあるエントリを示すブレッドクラムトレイルがあります(ツリーのようなもので、さまざまなレベルのエントリがあり、下の各エントリは親にリンクされています上記など)。これらのリンクは、VB側の関数を使用して作成された単純なhtmlリンクです。私の問題は、親ページからエントリをクリックすると、すべてが正しく読み込まれることです。しかし、iframeのブレッドクラムトレイルでwithからのリンクをクリックすると、一部の画像上でマウスをスクロールすると、マウスオーバーを処理する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に既にあるリンクをクリックしたりすることに違いがないことを確信しています(ストアドプロシージャに使用されるパラメータに関して)。エラーセクションは最後にあるようです。具体的には、サブの終わりに向かって3行で、「If DS.Item( "activity_enable")= 1Then」で始まる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
よろしくお願いします。
編集:一重引用符を通常の引用符に変更すると、&#39ではなく&quoteに置き換えられるため、これは解決策ではありませんでした。
編集2:これが.net 4.0とセキュリティアップデートの原因のようです-3.5にロールバックするとこの問題は修正されますが、これはオプションではありません。この変換を停止する他の解決策はありますか?