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属性なのでしょう。