asp.net - 在运行时动态添加脚本到动态创建的 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>
解决方案
好的,我要走另一条路,代码没有触发。我知道有更简单的方法可以做到这一点——所以我添加了一张 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``
推荐阅读
- pandas - apache 箭头 - 并行处理的充分性
- python - Python 正则表达式从内部匹配开始
- javascript - 如何在 JavaScript 中使用 google-protobuf 对带有“map”的消息进行编码?(协议缓冲区)
- javascript - 为什么javascript显示字符串所有算术运算?
- ruby-on-rails - Sidekiq 作业在其他作业运行时随机冻结
- django - 如何提示用户将 pdf 文件保存到 django 中的本地计算机?
- php - 如何在共享主机上使用 WebRTC 和 PHP 实现点对点文本聊天
- google-cloud-platform - 无论如何要在对话流中发起聊天吗?
- java - 如何通过使用索引指定数组位置来打印多维数组元素?
- python - 如何在列表中找到最频繁的