- PR -

VB.NET WEBフォームの更新について

投稿者投稿内容
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-07-26 20:11
引用:

恐らくVB.NETのバグと思われますが、テーブルコントロールの子コントロールが同じID名だと、ポストバック後も古い内容が残ってしまうようです。


その ID は、そのまま HTML として出力されるのではないですか?

少なくとも W3C HTML4.x では、id は文書内で一意でなければなりませんよ。
http://www.w3.org/TR/html401/struct/global.html#h-7.5.2
/*
id = name [CS]
This attribute assigns a name to an element. This name must be unique in a document.
*/
WEIWEI
常連さん
会議室デビュー日: 2002/07/16
投稿数: 26
投稿日時: 2002-07-26 23:09
>その ID は、そのまま HTML として出力されるのではないですか?

biacさん、説明不足で申し訳ありません。
実は、ポストバック後、table1.Rows.Clear()を実行し、子コントロールを全て削除するようにしています。従って、再度レンダリングするときは以前の子コントロールはHTMLとして出力されないはずだと思います。
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-07-27 02:10
引用:
--------------------------------------------------------------------------------


テーブルの中に動的にリテラルも挿入するようにして、再度調べてみました。その結果、行数、列数、リテラルの動的変更は全く問題なく意図した通りの表示に更新されました。従って、べーちゃんさんがおっしゃる通り製品版になって仕様が変更しているものと考えられます。

--------------------------------------------------------------------------------

WEIWEIさん、貴重な情報ありがとうございました。
ベータのときに動的変更が無効になるというという問題にあたって以来、
(ぶちあたっていたのは同僚でしたが)
テーブルをほとんど使うことなくDataGridを使って作業するように
していたので今度機会があればTABLEにチャレンジしてみます。
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-07-29 11:31
引用:

>その ID は、そのまま HTML として出力されるのではないですか?

biacさん、説明不足で申し訳ありません。
実は、ポストバック後、table1.Rows.Clear()を実行し、子コントロールを全て削除するようにしています。従って、再度レンダリングするときは以前の子コントロールはHTMLとして出力されないはずだと思います。



ごめんなさい、読み違えました。 m(_`_)m

引用:

恐らくVB.NETのバグと思われますが、テーブルコントロールの子コントロールが同じID名だと、ポストバック後も古い内容が残ってしまうようです。


「同じ」と書かれたのは、「セッションごとに同じ」という意味だったのですね。

そりゃ、name 属性も ID 属性も同じなら、同じサーバーコントロールとみなされて、入力されたデータが「残る」でしょう。
コントロールというのが、HTML サーバーコントロールなのか Web サーバーコントロールなのかユーザーコントロールなのか、わかりませんが。 HTML サーバーコントロールでは、「コントロールの状態を自動的に保守する機能」があるんですから。 (その他のサーバーコントロールでは、実装次第。)

そういう ASP.NET の「おせっかい」が不要なら、ただの HTML コントロール (runat="server" 無し) にしておけばよさそうな… f(^^;
WEIWEI
常連さん
会議室デビュー日: 2002/07/16
投稿数: 26
投稿日時: 2002-07-29 16:34
引用:
--------------------------------------------------------------------------------

そりゃ、name 属性も ID 属性も同じなら、同じサーバーコントロールとみなされて、入力されたデータが「残る」でしょう。
コントロールというのが、HTML サーバーコントロールなのか Web サーバーコントロールなのかユーザーコントロールなのか、わかりませんが。 HTML サーバーコントロールでは、「コントロールの状態を自動的に保守する機能」があるんですから。 (その他のサーバーコントロールでは、実装次第。)

--------------------------------------------------------------------------------

まさにその通りですね。入力データが残ってもらわなければ困ります。しかし、サーバーサイドで更新できなくても困るんではないですか?ずっと前のデータが表示され、何らかの予期せぬタイミングで、また別のデータに変わるようでは、全く困ります。特に、WEBコントロールの場合、WEBコントロールとしての機能を果たさなくなります。

それにしても、私としてはテーブルWEBコントロールが気に入りました。DataGridも非常に良くできていていいですが、ちょっと変わったことをしようとすると、とたんに壁にぶち当たってしまいます。至れり尽せりですが、反面おせっかいすぎるのです。例えば、1行づつテーブルデータをエディトする分には、簡単なコードで実現するのですが、全行まとめてエディトするとなると、非常に難しい。一方、テーブルWEBコントロールを使うと、少し実装を工夫すると、ある程度簡単に望みの機能が実現してしまいます。DataGridに対してこんな考えをお持ちの方、結構おられると思うのですが。いかがでしょうか?
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-07-29 18:09
引用:

ずっと前のデータが表示され、何らかの予期せぬタイミングで、また別のデータに変わるようでは、全く困ります。


キャッシュの話? (@@;
WEIWEI
常連さん
会議室デビュー日: 2002/07/16
投稿数: 26
投稿日時: 2002-07-29 20:09
biacさん、すみません。ようやくおっしゃっている意味がわかってきました。
同じセッション内で、コードビハインドで作ったサーバーコントロールは、考えてみたら一回きりのものです。それを、ポストバック後に同じNAME属性、ID属性で再度作成したら、いくら初期値を設定しても、過去の値と競合し、動作は不定になる、と言うことでしょうか?
私の勉強不足です。魔法の杖シンドロームに陥らないよう、勉強いたします。

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