- PR -

動的に作成したhtmlコントロールにrunat属性を追加する方法

投稿者投稿内容
sarubobo
会議室デビュー日: 2004/01/31
投稿数: 6
投稿日時: 2004-01-31 13:00
はじめまして。
ASP.NETで動的に生成したHtmlInputHiddenコントロールに
runat=server属性を追加したいのですが、
どのように記述すればいいか教えて頂けませんでしょうか。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-01-31 18:24
saruboboさん、こんばんは。

引用:

ASP.NETで動的に生成したHtmlInputHiddenコントロールに
runat=server属性を追加したいのですが、


動的に、というのは、例えば何かのイベントハンドラ内で
Dim hdn As HtmlInputHidden = New HtmlInputHidden
Me.Controls.Add(hdn)
みたいに生成する、ということですよね?
生成された時点でこれはサーバコントロールだと思うんですけど、そういう話じゃないんでしょうか...。
sarubobo
会議室デビュー日: 2004/01/31
投稿数: 6
投稿日時: 2004-01-31 19:33
きくちゃんさん、早速の回答ありがとうございます。

>生成された時点でこれはサーバコントロールだと思うんですけど、
>そういう話じゃないんでしょうか...。

おっしゃる通りです。やりたい事はHtmlInputHiddenのValue値に値を
セットしたいだけなのですが、下記の様にPostBackされた時に
最初の値(非ポストバック時)と違う値をセットしたいのですが、
非ポストバック時は正しい値がセットされるのですが、ポストバック時に
プログラム上では値("aaa")はセットされるのですが、実行してHTMLソースを表示させると
value値にポストバックするの前の値(下記だと"bbb")が書き出されてしまうのです。
静的に作成したコントロール(下記hidA)は問題なく動作するのですが、
動的に作成したコントロール(hidB)だとうまく動かないのです。
その違いを考えたところ
明示的にrunat=server属性を指定しないといけないのかと考えた次第です
IDをポストバック前と後で違うものにすれば動くのですが、あまり実用的で
ないもので。。。。。。
他に解決方法があれば教えて頂けませんでしょうか。
よろしくお願いいたします。

Dim myControl1 As HtmlForm = FindControl("Form1")
Dim hidA As HtmlInputHidden = FindControl("hidA") '静的コントロール
Dim hidB As HtmlInputHidden = New HtmlInputHidden() '動的コントロール

hidB.ID = "hidB"
If Page.IsPostBack = True Then
hidB.Value = "aaa"
  hidA.Value = "aaa"
Else
hidB.Value = "bbb"
hidA.Value = "bbb"
End If
myControl1.Controls.Add(hidB)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-01 16:38
が〜ん。送ったつもりなかったのに・・・ということで削除

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-02-01 17:15 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-01 17:14
 属性にrunat=serverを追加するだけなら、
.attribute.add("runat", "server")
でいいのでしょうが・・・

 これって、Page_Loadの時点で作るのなら、PostDataメソッドでは、誰がポストされたデータを受け取るんでしょうねぇ?

参照:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconcontrolexecutionlifecycle.asp
sarubobo
会議室デビュー日: 2004/01/31
投稿数: 6
投稿日時: 2004-02-01 17:53
Jittaさん、ご回答ありがとうございます。

> 属性にrunat=serverを追加するだけなら、
>.attribute.add("runat", "server")
>でいいのでしょうが・・・

この方法ではタグの属性として出力されてしまうのです↓
<input type="hidden" name="hidB" runat="server">

静的コントロールだとできてしまうのに、
動的コントロールだとできないというのが
よく理解できないのです。。。。。。。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-02-01 18:55
はずしているかもしれませんが
hidBをNewするのはPostBackがFalseの時で
PostBackがTrueの時は
Dim hidB As HtmlInputHidden = FindControl("hidB")
とやるべきなのではないでしょうか?
sarubobo
会議室デビュー日: 2004/01/31
投稿数: 6
投稿日時: 2004-02-01 21:04
burton999さん、ご回答ありがとうございます。

>PostBackがTrueの時は
>Dim hidB As HtmlInputHidden = FindControl("hidB")
>とやるべきなのではないでしょうか?

ポストバックされてきた時にはhidBは存在していない為、
駄目みたいです。。。

スキルアップ/キャリアアップ(JOB@IT)