トップ回答者
FormView内に配置したLavelのテキストプロパティをSessionに格納するには?

質問
-
【開発環境】Visual Studio 2008, Visual Basic, SQL Server2005 Express Edition
一覧表示のためのページにFormViewを配置して、その中にLavelを複数配置して、DB(日付をプライマリーキーとして設定)から取得したレコードをデータバインドして表示させています。
同一ページ内に設置したButtonのClick イベントプロシージャで、FormView内の日付情報がバインドされた Label のTextプロパティを取得してSessionに格納させたいのですがうまくいきません。
目的としては、一覧表示用のページ(Index.aspx)にある指定枠(FormView)から詳細ページ(Read.aspx)へ遷移したいのですが…
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Session("date") = FormViewRead.BindingContainer
Response.Redirect("Read.aspx")
End Sub下線の部分に日付情報を入れると、その日付の内容でRead.aspxを参照することができます。
日付情報がバインドされたLavelのIDが"Lavel1"なのですが、下線部にLavel1.Textとすると「名前’Lavel1’は宣言されていません」とオブジェクト名が違っている旨がインテリセンス上に表示されます。
なにとぞアドバイスの程、よろしくお願いいたします m(_ _)m
- 編集済み WEBデザイナー 2010年6月6日 1:23
回答
-
ごく基本的なことですが、メソッドの引数と戻り値が何か、その型は何か強く
意識してコーディングするようにしてください。FindControl(String id) メソッドの場合、引数 id は検索するコントロールの
ID で、戻り値は検索で見つかったコントロールへの参照値です。> FormView内の日付情報がバインドされた Label のTextプロパティを取得して
> Sessionに格納させたいのですがうまくいきません。ということであれば、その Label の ID が引数になります(Text プロパティで
はありません)。引数に指定した ID の Label が見つかれば、その Label への参照値を Control
型として返します(これも Text プロパティではありません)。見つからなけれ
ば null(VB の場合は Nothing)を返します。従って、目的の Label の ID が Label1 であれば、引数は "Label1" とするのが
正しいです。戻り値は Control 型になりますので、それを Label 型にキャストしてから Text
プロパティを取得してから Session に代入するというステップが必要です。- 回答としてマーク WEBデザイナー 2010年6月6日 6:37
すべての返信
-
小野様 ご教示ありがとうございます。
ご指摘の点を踏まえて、イベントプロシージャを
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Session("date") = Me.FormViewRead.Row.FindControl("Label1.Text")
Response.Redirect("Read.aspx")
End Subとしてみたのですが、Sessionに格納できていないようで、参照ページで指定内容を受け取ることができません。
インテリセンス上の波線もなく、ビルドエラーは起こらないのですが…
引き続きアドバイスをいただけますと幸いです。
-
SurferOnWwwさま
ありがとうございます。
Session("date") = Me.FormViewRead.Row.FindControl("Label1")
としてビルドいたしますと、『オブジェクトは IConvertible を実装しなければなりません。』と、サーバーエラーが発生してしまいます。
Session("date") = Me.FormViewRead.Row.FindControl("Label1.Text")
に再び設定いたしますと、Session("date")の引渡しはないのですが、
Response.Redirect("Read.aspx") のステートメントまでは実行されます…。
引き続きアドバイスをいただけますと幸いです。
-
ごく基本的なことですが、メソッドの引数と戻り値が何か、その型は何か強く
意識してコーディングするようにしてください。FindControl(String id) メソッドの場合、引数 id は検索するコントロールの
ID で、戻り値は検索で見つかったコントロールへの参照値です。> FormView内の日付情報がバインドされた Label のTextプロパティを取得して
> Sessionに格納させたいのですがうまくいきません。ということであれば、その Label の ID が引数になります(Text プロパティで
はありません)。引数に指定した ID の Label が見つかれば、その Label への参照値を Control
型として返します(これも Text プロパティではありません)。見つからなけれ
ば null(VB の場合は Nothing)を返します。従って、目的の Label の ID が Label1 であれば、引数は "Label1" とするのが
正しいです。戻り値は Control 型になりますので、それを Label 型にキャストしてから Text
プロパティを取得してから Session に代入するというステップが必要です。- 回答としてマーク WEBデザイナー 2010年6月6日 6:37