- - PR -
動的に作成したhtmlコントロールにrunat属性を追加する方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-02 09:49
意味がよくわかりません。
のではないですか?それ以上に、何が必要ですか? それで、参照としてあげたページは見ていただけましたか?読むのが面倒なら、こちらで図化しています。 http://quick-tips.hp.infoseek.co.jp/asp.net/tip.html#EventOrder これを見ると、ポストバックされたデータを受け取るのは、Page.Loadイベントより前であることがわかります。『誰がポストされたデータを受け取るんでしょうねぇ?』と付け足した理由がお解りいただけるでしょうか。お解りいただけたなら、なぜ動的に追加したコントロールで値が受け取れないか、またはどこで追加しなければならないか、お解りいただけると思うのですが。おそらく、場所を変えればいけると思います。どこに移すかは、参照としてあげたMSDNのトピックをよく読んでください。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-02-02 09:51 ] | ||||||||
|
投稿日時: 2004-02-02 12:35
Jittaさん、ご回答ありがとうございます。
>意味がよくわかりません。 静的に作成したサーバコントロールはaspxファイル内では <input type="hidden" name="hidA" runat="server"> の記述になると思うのですが、このコントロールと同じ様に (サーバコントロールとして)動的コントロールを作成したいという意味 だったのです。Atrribute.addだと実行時にHTMLソースを表示させた 時にタグとして<input type="hidden" name="hidA" runat="server"> 書かれてしまうという意味です >どこに移すかは、参照としてあげたMSDNのトピックをよく読んでください。 よく読んでみます。 ありがとうございました。 | ||||||||
|
投稿日時: 2004-02-02 14:56
自分もずいぶん前に同じような疑問を持ち、結局分からずじまいでそのままとしていたのですが、また興味が沸いたんでちと調べてみました。で・・・・結局根本的にどうしてそうなるのか分からんのですが(爆)、ポストバック時に動的に生成したコントロールに値を入れなおすには、RaisePostBackEventをオーバーライドしてやって、その中で値をセットしてやるとよいようです。
(正確にはPage_Loadイベントが終わったあとのどこかでかな・・・う〜ん?) | ||||||||
|
投稿日時: 2004-02-02 15:37
値を受け取らないなら、こんな風で「値をセットすること」はできますよ。
訂正: ソースを確認すると、FORM(はおろか、HTML)の外にコントロールが追加されていました。で、修正すると、値を受け取ることもできます。 Private Sub Page_Init(ByVal sender As System.Object _ , ByVal e As System.EventArgs) Handles MyBase.Init ' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。 ' コード エディタを使って変更しないでください。 InitializeComponent() ' ページの“初期化”は、ここでする。 ' 自動生成されるコメントが間違っている。 Dim AutoText As System.Web.UI.HtmlControls.HtmlInputText AutoText = New System.Web.UI.HtmlControls.HtmlInputText AutoText.ID = "autoText" ' ここから下、修正 Dim f As System.Web.UI.HtmlControls.HtmlForm f = Me.FindControl("Form1") If Not f Is Nothing Then f.Controls.Add(AutoText) Else Me.Controls.Add(AutoText) End If End Sub Private Sub Page_Load(ByVal sender As System.Object _ , ByVal e As System.EventArgs) Handles MyBase.Load ' ページを初期化するユーザー コードをここに挿入します。 ' 正しくは「クライアントから依頼があったときに実行されるコード」 If Me.IsPostBack Then Dim cntrl As System.Web.UI.Control _ = CType(Me.FindControl("autoText"), System.Web.UI.Control) If TypeOf cntrl Is System.Web.UI.HtmlControls.HtmlInputText Then Dim inp As System.Web.UI.HtmlControls.HtmlInputText _ = CType(cntrl, System.Web.UI.HtmlControls.HtmlInputText) ' ここで取得はできませんでした→できるようになりました Label1.Text = inp.Value ' 値の設定はできました inp.Value = "CHANGE" End If End If End Sub [ メッセージ編集済み 編集者: Jitta 編集日時 2004-02-02 15:42 ] | ||||||||
|
投稿日時: 2004-02-02 20:34
>動的に生成したコントロールに値を入れなおすには、
>RaisePostBackEventをオーバーライドしてやって、その中で値をセットしてやるとよいよう >です。 noderaさん、情報ありがとうございます >値を受け取らないなら、こんな風で「値をセットすること」はできますよ。 Jittaさん、サンプルありがとうございます。 この方法でうまくいきました ありがとうございました<(_ _)> |