次のように、コードビハインドにhtmlを追加してWebコントロールを作成しています。
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イベントを使用して画像ボタンまたは任意のボタンのソースを表示すると、実際にはコードビハインドでも表示されません。
どんな助けでも素晴らしいでしょう。ああ、私はVisualStudio2005で開発しています
ありがとうジェイソン
このようなサーバーコントロールを追加しようとすると、次のようになります。
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」は、「パブリックイベントコマンド(オブジェクトとしての送信者、webcontrols.commandEventArgsとしてのe)はイベントであり、直接呼び出すことはできません。イベントを発生させるには、raiseeventステートメントを使用してください」というエラー(青い波線)を表示します。
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
これはうまくレンダリングされているように見えますが(ソースを表示すると)、メソッドが実際に呼び出されることはありません。