我創建的插件Web控件的代碼生成的HTML的背後,是這樣的:添加事件來控制動態
Dim sb As New StringBuilder
Dim myDiv As HtmlGenericControl = Me.theContainer
sb.Append("<table width='100%' cellpadding='0' cellspacing='0' style='border:0px;'>" & vbCrLf)
sb.Append(" <tr class='mainRow1'>" & vbCrLf)
sb.Append("<td align='left' style='border:0px solid white;'>Main Menu</td>" & vbCrLf)
sb.Append("<td>" & vbCrLf)
sb.Append("<asp:Label ID='Label1' runat='server' Text='Label'></asp:Label>" & vbCrLf)
sb.Append("</td>" & vbCrLf)
sb.Append("<td align='right' style='border:0px solid white;'>Sort By: Id | Name</td>" & vbCrLf)
sb.Append("</tr>" & vbCrLf)
sb.Append("</table>" & vbCrLf)
myDiv.InnerHtml = sb.ToString
,這將產生的代碼隱藏表的HTML,然後把它注射到指定的DIV元素。我的問題是,如果我以這種方式創建控件,如何添加將在我的代碼隱藏中激發方法的事件?例如,如果我想創建一個圖像按鈕,我會做這樣的代碼:
<asp:ImageButton CommandArgument='<%# (Container.DataItem.objectValue) %>'
ID='ImageButton1' runat='server' OnCommand='Button1_Click' ImageUrl='~/images/folder.gif' />
,但在後面的代碼我這樣做:
sb.Append("<input type='image' name='ctl00$ContentPlaceHolder1$importWizard1$folderControl1$folderRepeater$ctl04$ImageButton" & myCounter & "'")
sb.Append(" id='ctl00_ContentPlaceHolder1_importWizard1_folderControl1_folderRepeater_ctl04_ImageButton" & myCounter & "'")
sb.Append(" src='images/folder.gif' style='border-width:0px;' />" & vbCrLf)
我的問題是,考慮到我在服務器上生成控件,如何添加將在服務器上觸發特定方法的「onCommand」事件?我不打算只是導致頁面重新加載。此功能位於更新面板中的用戶控件(ascx文件)中。我只想更新面板回發,而不是整個頁面。當我使用ONCommand事件查看圖像按鈕或任何按鈕的來源時,它甚至不會在後面的代碼中出現。
任何幫助將是偉大的。哦,我與Visual Studio 2005
感謝 發展傑森
,如果我嘗試添加像這樣的服務器控件:
Dim img As New ImageButton
img.Command = New CommandEventHandler(AddressOf Button1_Click)
img.ID = "button-" & item.directoryName & "-" & item.objectValue
Dim newSb As StringBuilder = New StringBuilder()
Dim tw As StringWriter = New StringWriter(newSb)
Dim hw As HtmlTextWriter = New HtmlTextWriter(tw)
img.RenderControl(hw)
的「img.Command」給我一個錯誤(藍squigley行)說:「公共事件命令(發件人爲對象,e爲webcontrols.commandEventArgs)是一個事件,不能直接調用。使用引發事件語句來引發事件」
Dim img As New ImageButton()
img.ID = "button-" & item.directoryName & "-" & item.objectValue
img.ImageUrl = "images/folder.gif"
AddHandler img.Click, AddressOf img_Click
Dim newSb As StringBuilder = New StringBuilder()
Dim tw As StringWriter = New StringWriter(newSb)
Dim hw As HtmlTextWriter = New HtmlTextWriter(tw)
img.RenderControl(hw)
sb.Append(tw.ToString)
Protected Sub img_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
...
End Sub
雖然這看起來很好(當我查看源代碼時)該方法從來沒有實際調用過。
感謝您的回覆。我試過創建一個服務器控件,但我沒有選擇添加「.Command」。 Intelisense只有.CommandName(一個字符串)和.commandArguement。如果它有所作爲,即時通訊使用visual studio 2005 – jason 2012-07-26 13:34:33
ImageButton從.NET 1.1開始就有一個Command事件(請參閱http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.imagebutton。命令(v = vs.71).aspx) - 你確定你正在創建一個ImageButton而不是一個圖像?你可以發佈你已經嘗試過嗎? – 2012-07-26 13:41:34
生病追加我原來的問題 – jason 2012-07-26 14:01:02