首页 > 解决方案 > 在运行时动态添加脚本到动态创建的 Div vb.net aspx

问题描述

我创建了一个带有 Parentdiv容器的 Web 表单,该容器包含div基于 SQL 查询的 child。子项的数量基于查询结果中的行数。我遇到了一个障碍,我认为这是因为我在div创建 s 时以编程方式添加了一个脚本。我知道该脚本有效,因为我对其进行了测试。它只是不会为动态创建的 div 触发。

这是子 div 中的代码。它有效,但不适用于动态创建div的 s。

Sub ThumbView()

    lbl_Status.Text = "ThumbView"

    ListPanel.Visible = False
    Dim MyTable As String = "[Estimate_Info4]"
    Dim Sql As String = "SELECT* FROM [Estimate_Info4]"
    Dim dbConnection = New SqlConnection(connString)
    Dim dbCommand = New SqlCommand(Sql, dbConnection)
    Dim data As New SqlDataAdapter(dbCommand)
    Dim table As New DataTable(MyTable)
    Dim rowIndex As Integer = 0

    '//////////Open Database Connection////////////

    dbConnection.Open()
    data.Fill(table)

    '//////////Loop through Data & Create Div for each Record //////////////


    For Each row As DataRow In table.Rows
        For i As Integer = 0 To (table.Rows.Count - 1)
            Try
                rowIndex = i

                '/////////////////Control Delcarations/////////////////////

                Dim NumberName As String = CStr(table.Rows(rowIndex)("EstNumber")) & " " & CStr(table.Rows(rowIndex)("JobName"))
                Dim CleanName As String = RemoveWhitespace(NumberName)
                Dim LBL_EstId As Label = New Label
                Dim LBL_EstNumber As Label = New Label
                Dim LBL_EstName As Label = New Label
                Dim LBL_EstAddress1 As Label = New Label
                Dim LBL_EstAddress2 As Label = New Label
                Dim LineBreak As HtmlGenericControl = New System.Web.UI.HtmlControls.HtmlGenericControl("br")
                Dim LineBreak1 As HtmlGenericControl = New System.Web.UI.HtmlControls.HtmlGenericControl("br")
                Dim LineBreak2 As HtmlGenericControl = New System.Web.UI.HtmlControls.HtmlGenericControl("br")
                Dim LineBreak3 As HtmlGenericControl = New System.Web.UI.HtmlControls.HtmlGenericControl("br")
                Dim LineBreak4 As HtmlGenericControl = New System.Web.UI.HtmlControls.HtmlGenericControl("br")
                Dim LineBreak5 As HtmlGenericControl = New System.Web.UI.HtmlControls.HtmlGenericControl("br")
                Dim div As HtmlGenericControl = New HtmlGenericControl("div")
                Dim divleft As HtmlGenericControl = New HtmlGenericControl("div")
                Dim divright As HtmlGenericControl = New HtmlGenericControl("div")
                Dim MyScript As HtmlGenericControl = New HtmlGenericControl("Script")
                Dim MyIMG As ImageButton = New ImageButton
                Dim MyIMG2 As ImageButton = New ImageButton
                Dim RecID As Integer = (table.Rows(rowIndex)("Id"))
                Dim RecID2 As String = CStr(table.Rows(rowIndex)("Id"))



                '/////////////////Add 1st Child Div//////////////////

                div.Attributes.Add("runat", " = server")
                div.Style.Add("Class", "test")
                div.Style.Add("width:", "637px")
                div.Style.Add("height:", "228px")
                div.Style.Add("aria-multiline", "True")
                div.Style.Add("font-family", "verdana")
                div.Style.Add("aria-multiline", "True")
                div.Style.Add("word-break", "break-all")
                div.Style.Add("word-wrap", "break-word")
                div.Style.Add("Padding", "100x")
                div.Style.Add("Border", "thick solid #666666")
                div.Style.Add("margin-bottom", "10px")
                div.Style.Add("margin-top", "10px")
                div.Style.Add("margin-right", "10px")
                div.Style.Add("margin-left", "10px")
                div.Style.Add("display", "inline-grid")

                Panel1.Style.Add("display", "inherit")
                Panel1.Controls.Add(div)


                '/////////////////Add 1st Child to First Child Div Float Left to house Image//////////////////

                Dim StartString As String = "<script language=" & Chr(34) & "vb" & Chr(34) & "runat=" & Chr(34) & "server" & Chr(34) & ">" & Chr(10)
                Dim EndString As String = "Sub ImageBttn" & RecID & "_Click(sender As Object, e As ImageClickEventArgs) Handles ImageBttn" & RecID & ".Click" & Chr(10) &
                "Dim JobName As String = ImageBttn" & RecID & ".DescriptionUrl" & Chr(10) & "Dim JobID As String = ImageBttn" & RecID2 & ".CommandName" & Chr(10) &
                "Response.Redirect(String.Format(" & Chr(34) & "~/476.aspx?JobName={0}&JobID={1}" & Chr(34) & ", JobName, JobID))" & Chr(10) & "End Sub" '& Chr(10) & "</script>"
                ' Dim inputString As String = EndString.Replace((Char)34),"").ToString()
                'MsgBox(StartString & EndString)

                Dim Q As String = Chr(34).ToString
                Dim aString As String = Q & "~/476.aspx?JobName={0}&JobID={1}" & Q & ", JobName, JobID))"
                Dim mymsg As String = "You Clicked" & NumberName

                Dim folderPath As String = Server.MapPath("~/Files/VBScripts/")
                Dim Mypath As String = folderPath & CleanName & ".vbs"
                Try
                    'Check whether Directory (Folder) exists.
                    If Not Directory.Exists(folderPath) Then
                        'If Directory (Folder) does not exists Create it.
                        Directory.CreateDirectory(folderPath)
                    End If
                    'Save the File to the Directory (Folder).
                    'Dim Path As String = Server.MapPath("~/Files/VBScripts/")


                    Dim fs As FileStream = File.Create(Mypath)

                    ' Add text to the file.
                    Dim info As Byte() = New UTF8Encoding(True).GetBytes(EndString)
                    fs.Write(info, 0, info.Length)
                    fs.Close()


                Catch ex As Exception
                    MsgBox("Something has gone wrong..." & vbNewLine & ex.Message)

                End Try


                MyIMG.Style.Add("ID", CleanName)
                MyIMG.Style.Add("Runat", "server")
                MyIMG.Style.Add("OnClick", "ImageBttn" & RecID & "_Click")
                MyIMG.Style.Add("DiscriptionUrl", NumberName)
                MyIMG.Style.Add("CommandName", RecID2)
                MyIMG.Style.Add("Class", "inner")

                ' /////////////// Create VBScript File and Add to Div////////////////

                MyScript.Attributes.Add("script language", "vb")
                MyScript.Attributes.Add("runat", "server")
                MyScript.Attributes.Add("src", MyPath)


                ' src="
                divleft.Attributes.Add("runat", " = server")
                divleft.Style.Add("Class", "inner")
                divleft.Style.Add("width: ", "186px")
                divleft.Style.Add("height:", "228px")
                divleft.Style.Add("aria-multiline", "True")
                divleft.Style.Add("font-family", "verdana")
                divleft.Style.Add("aria-multiline", "True")
                divleft.Style.Add("Padding", "100x")
                divleft.Style.Add("Border", "1px Gray")
                divleft.Style.Add("Float", "Right")
                divleft.Style.Add("display", "inline-Block")
                divleft.Controls.Add(MyScript)

                div.Controls.Add(divleft)

                '/////////////////Add 2nd Child to First Child Div Float Right to house Labels//////////////////

                divright.Attributes.Add("runat", " = server")
                divright.Style.Add("Class", "inner")
                divright.Style.Add("width:", "351px")
                divright.Style.Add("height:", "228px")
                divright.Style.Add("aria-multiline", "True")
                divright.Style.Add("font-family", "verdana")
                divright.Style.Add("aria-multiline", "True")
                divright.Style.Add("Padding", "100x")
                divright.Style.Add("Border", "1px Gray")
                divright.Style.Add("Float", "Left")


                divright.Style.Add("display", "inline")
                div.Controls.Add(divright)

                '/////////////////Add Controls to all of the Children//////////////////

                MyIMG.Style.Add("ID", CleanName)
                MyIMG.Style.Add("Runat", "server")
                MyIMG.Style.Add("DiscriptionUrl", NumberName)
                MyIMG.Style.Add("CommandName", RecID2)
                MyIMG.Style.Add("Class", "inner")
                MyIMG.Style.Add("OnClick", "ImageBttn" & RecID & "_Click")
                divleft.Controls.Add(MyIMG)
                MyIMG.ImageUrl = "~/Images/BLDG1.jpg"




                LBL_EstNumber.Style.Add("runat", "server")
                LBL_EstNumber.Style.Add("Height", "21px")
                LBL_EstNumber.Style.Add("Width", "266px")
                LBL_EstNumber.Style.Add("Font-Names", "Verdana")
                LBL_EstNumber.Style.Add("Font-Size", "medium")
                LBL_EstNumber.Style.Add("Font-Bold", "True")
                LBL_EstNumber.Style.Add("ForeColor", "#666666")
                LBL_EstNumber.Text = Chr(10) & "  " & CStr(table.Rows(rowIndex)("EstNumber")) & " "
                divright.Controls.Add(LineBreak1)
                divright.Controls.Add(LBL_EstNumber)
                LBL_EstNumber.Font.Bold = True


                LBL_EstName.Style.Add("runat", "server")
                LBL_EstName.Style.Add("Height", "21px")
                LBL_EstName.Style.Add("Width", "266px")
                LBL_EstName.Style.Add("Font-Names", "Verdana")
                LBL_EstName.Style.Add("Font-Size", "medium")
                LBL_EstName.Style.Add("Font-Bold", "True")
                LBL_EstName.Style.Add("ForeColor", "#666666")
                LBL_EstName.Text = Chr(10) & "  " & CStr(table.Rows(rowIndex)("JobName")) & "   "
                divright.Controls.Add(LineBreak2)
                divright.Controls.Add(LBL_EstName)
                LBL_EstName.Font.Bold = True

                LBL_EstAddress1.Style.Add("runat", "server")
                LBL_EstAddress1.Style.Add("Height", "21px")
                LBL_EstAddress1.Style.Add("Width", "266px")
                LBL_EstAddress1.Style.Add("Font-Names", "Verdana")
                LBL_EstAddress1.Style.Add("Font-Size", "Small")
                LBL_EstAddress1.Style.Add("ForeColor", "666666")
                LBL_EstAddress1.Text = CStr(table.Rows(rowIndex)("JobAddress"))
                divright.Controls.Add(LineBreak3)
                divright.Controls.Add(LBL_EstAddress1)

                LBL_EstAddress2.Style.Add("runat", "server")
                LBL_EstAddress2.Style.Add("Height", "21px")
                LBL_EstAddress2.Style.Add("Width", "266px")
                LBL_EstAddress2.Style.Add("Font-Names", "Verdana")
                LBL_EstAddress2.Style.Add("Font-Size", "Small")
                LBL_EstAddress2.Style.Add("ForeColor", "666666")
                LBL_EstAddress2.Text = CStr(table.Rows(rowIndex)("JobCity")) & ", " & CStr(table.Rows(rowIndex)("JobState")) & " " & CStr(table.Rows(rowIndex)("JobZipCode"))
                divright.Controls.Add(LBL_EstAddress2)
                divright.Controls.Add(LineBreak4)

                MyIMG2.Style.Add("runat", "server")
                divright.Controls.Add(MyIMG2)

                Dim EstStatus As Integer = (table.Rows(rowIndex)("EstimateStatus"))

                If EstStatus = 2 Then MyIMG2.ImageUrl = "~/Images/Loss.jpg"
                If EstStatus = 3 Then MyIMG2.ImageUrl = "~/Images/Awarded.jpg"
                If EstStatus = 1 Then MyIMG2.ImageUrl = "~/Images/Pending.jpg"


            Catch Ex As Exception
                MsgBox("We've encountered an error; " & Ex.Message)
            End Try

        Next

    Next
    '/////////////////unhide the parent//////////////

    Panel1.Style.Add("Height", "800px")
    Panel1.Style.Add("width", "1800px")
    Panel1.Style.Add("overflow", "scroll")
    Panel1.Style.Add("overflow-y", "Scroll")
    Panel1.Style.Add("overflow-x", "scroll")
    Panel1.Visible = True

End Sub

'end result
 <asp:ImageButton ID="ImageButton4" runat="server" ImageUrl="~/Images/BLDG1.jpg" OnClientClick="ImageButton4_Click" DescriptionUrl="EST 02 Concrete Superstructure Hotel" EnableTheming="True" />
            
         <script language="vb" runat="server">
             Sub ImageButton4_Click(sender As Object, e As ImageClickEventArgs) Handles ImageButton4.Click
                 Dim JobName As String = ImageButton4.DescriptionUrl
                 Dim JobID As String = ImageButton4.CommandName
                 Response.Redirect(String.Format("~/476.aspx?JobName={0}&JobID={1}", JobName, JobID))
             End Sub
</script>

标签: asp.net

解决方案


好的,我要走另一条路,代码没有触发。我知道有更简单的方法可以做到这一点——所以我添加了一张 webapps 拇指视图的照片——还有一个列表视图视图,带有指示状态的图标。我现在需要的只是要触发的代码——当我检查时它会显示在页面上。

![网络表单视图]: ( https://1drv.ms/u/s!AmmK5IyEVLSlg9gQSd_eb5KzA8UVcg?e=8sSdvI )

` 试试

                    Dim csName As [String] = "ClientScript" & RecID
                    Dim csType As Type = divleft.[GetType]()
                    Dim cs As ClientScriptManager = Page.ClientScript
                    If Not cs.IsClientScriptBlockRegistered(csType, csName) Then
                        Dim csText As New StringBuilder()
                        csText.Append("<script language=" & Chr(34) & "vb" & Chr(34) & "runat=" & Chr(34) & "server" & Chr(34) & ">")
                        csText.Append("Sub ImageBttn" & RecID & "_Click(sender As Object, e As ImageClickEventArgs) Handles ImageBttn" & RecID & ".Click" & Chr(10) &
               "Dim JobName As String = ImageBttn" & RecID & ".DescriptionUrl" & Chr(10) & "Dim JobID As String = ImageBttn" & RecID2 & ".CommandName" & Chr(10) &
                "Response.Redirect(String.Format(" & Chr(34) & "~/476.aspx?JobName={0}&JobID={1}" & Chr(34) & ", JobName, JobID))" & Chr(10) &
                "msgbox(ImageBttn" & RecID & ".DescriptionUrl)" & Chr(10) & "End Sub" & Chr(10) & "</script>")
                        cs.RegisterClientScriptBlock(csType, csName, csText.ToString())
                    End If

                Catch ex As Exception
                    MsgBox("Something has gone wrong..." & vbNewLine & ex.Message)

                End Try``

推荐阅读