質問: ウィンドウズフォームのコントロールであるSystem.Windows.Forms.Controlには Tagプロパティというのがあり、好きなデータを突っ込んで便利に使えるようです。 しかしASPのSystem.Web.UI.WebControls.WebControlにはTagプロパティはないようです。 ASPでもTagを使いたいのですがどうすればよいでしょうか。 いまのところ解決策として各コントロールクラスを継承してTagプロパティを追加した 新しいクラスを作って使っていますがもっと良い解決策はないでしょうか。 よろしくお願いします。
回答: `WebControl`には拡張属性を設定する領域として`Attributes`.aspx)プロパティが定義されています。 たとえば`data-tag`属性を使用する場合、`.aspx`側は以下のようになります。 ``` ``` コードビハインドでは`Attributes`のインデクサーから値が取得/設定できます。 ``` protected void Button_Click(object sender, EventArgs e) { var b = (Button)sender; var i = int.Parse(b.Attributes["data-tag"]); b.Attributes["data-tag"] = b.Text = (i * 2).ToString(); } ``` ただ本来はHTML属性を設定する場所ですので、副作用として出力結果に`data-tag`属性が追加されることになります。もしユーザーに絶対知られたくない値を指定したいのであれば、セッションを利用すると複数同時リクエストの対応が難しいので`Page.ViewState`にJSONなどで保存しておくのが良いと思います。