※ ChatGPTを利用し、要約された質問です(原文:FormViewのEditItemTemplateに配置したボタンへのjavascript組み込み)
FormViewのEditItemTemplateに配置したボタンへのjavascript組み込み
このQ&Aのポイント
VBでaspxを利用しシステムを開発していますが、次のような現象が発生し困っています。
FormViewのFormView1_ModeChangedにてイベントを拾い、「hello」ボタンにjavascriptを組み込もうとしていますが、この時点では「hello」ボタンのインスタンスが生成おらず、『オブジェクト参照がオブジェクト インスタンスに設定されていません。』のエラーになってしまいます。
EditItemTemplateに配置したボタンにプログラムでjavascriptを組み込みたいのですが、どなたか解決方法をご存知な方がいましたら、ご教示願いします。
FormViewのEditItemTemplateに配置したボタンへのjavascript組み込み
はじめまして
セバといいます。
VBでaspxを利用しシステムを開発していますが、
次のような現象が発生し困っています。
仕様
1.FormviewのItemTemplateに配置している「edit_Chage」ボタンで
FormviewをEditmodeに変更します。
2.FormviewのEditItemTemplateには「hello」ボタンを配置し、
ボタン押下時にjavascriptを起動します。
問題点
FormviewのFormView1_ModeChangedにてイベントを拾い、
「hello」ボタンにjavascriptを組み込もうとしていますが、
この時点では「hello」ボタンのインスタンスが生成おらず、
『オブジェクト参照がオブジェクト インスタンスに設定されていません。』
のエラーになってしまいます。
サンプルプログラム
///////////////////////////////
Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:FormView ID="FormView1" runat="server"
DataSourceID="SqlDataSource1">
<EditItemTemplate>
tmp1:
<asp:TextBox ID="tmp1TextBox" runat="server" Text='<%# Bind("tmp1") %>' />
<asp:Button ID="Button1" runat="server" Text="hello" />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="キャンセル" />
</EditItemTemplate>
<InsertItemTemplate>
</InsertItemTemplate>
<ItemTemplate>
tmp1:
<asp:Label ID="tmp1Label" runat="server" Text='<%# Bind("tmp1") %>' />
<br />
<asp:Button ID="Button2" runat="server" CommandName="edit" Text="edit_Chage" />
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT [tmp1] FROM [tmpTBL]">
</asp:SqlDataSource>
</form>
</body>
</html>
///////////////////////////////
Default.aspx.vb
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub FormView1_ModeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.ModeChanged
'「Hello」ボタンへのjavascript組み込み
If FormView1.CurrentMode = FormViewMode.Edit Then
Dim btn As Button
btn = CType(FormView1.FindControl("Button1"), Button)
Dim sbScript As New System.Text.StringBuilder()
sbScript.Append("alert('Hello')")
btn.Attributes("onclick") = sbScript.ToString()
End If
End Sub
End Class
////////////////////////
また、
「Hello」ボタンのインスタンスを強制的に作ろうと、
Default.aspx.vbにFormView1.DataBind()を組み込みましたが、
インスタンスは生成されたものの、
onclickタグは生成されませんでした。
If FormView1.CurrentMode = FormViewMode.Edit Then
Dim btn As Button
FormView1.DataBind() <--- ここに追加
btn = CType(FormView1.FindControl("Button1"), Button)
EditItemTemplateに配置したボタンにプログラムでjavascriptを組み込みたいのですが、
どなたか解決方法をご存知な方がいましたら、ご教示願いします。
お礼
tochansa様 回答ありがとうございます。 FormView1.PreRenderイベントに組み込んだ結果、 思い通りの振る舞いになりました。 PreRenderは、表示を開始する前に発生するイベントなんですね。 どうもありがとうございました。