LoginSignup
2
5

More than 5 years have passed since last update.

ASP.NET WebFormsのCheckBoxでvalueを指定する

Last updated at Posted at 2014-03-30
<form runat="server">
 <asp:Repeater ID="RptCheckBox" runat="server">
  <ItemTemplate>
   <asp:CheckBox ID="ChkSelect" runat="server" Text="選択" />
  <ItemTemplate>
 </asp:Repeater>
 <asp:Button ID="BtnPostBack" runat="server" Text="送信" />
</form>

みたいなページで選択されたCheckBoxの項目だけ取得したいとき、ASP.NET WebFormsのCheckBoxコントロールにValueプロパティがなくて困るときがあるんじゃないかと思う。

そういうときに、

<asp:CheckBox ID="ChkSelect" runat="server" Text="選択" Value="hoge" />

とか、RepeaterのItemDataBoundイベント内で

var chkSelect = (CheckBox)e.Item.FindControl("ChkSelect");
chkSelect.Attribute.Add("value", "hoge");

とかやると、実際に出力されるHTMLが

<span value="hoge">
 <input type="checkbox" name="RptCheckBox_ChkSelect_1" />
 <label for="RptCheckBox_ChkSelect_1">選択</label>
</span>

ってなってなかなかvalueを取るのが面倒臭い。

そんなときはRepeaterのItemDataBoundイベントの中で

var chkSelect = (CheckBox)e.Item.FindControl("ChkSelect");
chkSelect.InputAttribute.Add("value", "hege");

ってやると

<input type="checkbox" name="RptCheckBox_ChkSelect_1" value="hoge" />
<label for="RptCheckBox_ChkSelect_1">選択</label>

という風にHTMLが出力されるので、CheckBoxのvalueが取れるようになる。

valueを取りたいときは

var values = Request.Form.AllKeys.Where(keys => keys.Contains("ChkItem")).Select(key => Request.Form[key]);

ってやればIEmunerableで選択されたCheckBoxのvalueが取れる。

Repeaterの中にCheckBoxがなくても、コードビハインドで

ChkSelect.InputAttribute.Add("value", "hoge");

でvalueが指定できるし、valueを取るときは

string value;
if (ChkSelect.Selected)
 value = ChkSelect.InputAttribute["value"];

で取れる。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5