ASP.NET豆知識2 無敵のReadOnly属性


 ASP.NETでVB.NETとJavaScript(以降JSとします)を使って開発している時にサーバ側のReadOnly属性で困ったことがあったので、その時に何が起こっていたのかを調べてみました。

VB側のコードで「 textbox1.ReadOnly 」でReadOnly属性を付与したコントロールは、ページ側(JSに限らず、ページ側で加える編集)で編集した値が、ポストバック時にVBで取得できません。

htmlの属性で「readonly='readonly'」となっているので普通に編集できないのは当然ですが、JSでreadonly属性を外して書き換えたり、開発ツールなどでhtmlを直接書き換えても、サーバ側ではロード時の値に戻っています。

どうもサーバ側で「「ReadOnly=True」に設定したコントロールは、ポストバックで帰ってきた時にページ側の値を無視する」という動きをしているようです。このReadOnly以外にも、「Visible=False」を設定すると、CSSの「display:none」ではなく、出力されるhtmlからコントロールが跡形もなく消える、という動きになっています。サーバ側でASPコントロールの属性を使う場合は、ページ側で思わぬ動作をしたり、属性の名前が違っていることが多いので注意が必要です。

VBとJSの板挟みになってる中間管理職なASPさんは大変ですね…。きっとその鋼のマインドの現れがReadOnly属性なのでしょう。

このブログの人気の投稿

技術メモ「503 Service Unavailable」

グーグルグループのメーリングリストの返信先が個人になってしまう

『ネットワークドライブ』のトラブル