2011-01-06 10 views
3

RowDataBoundイベントのgridviewでGridViewRowの中にHtmlInputRadioButtonの名前を設定しています。問題は、asp.netが自動的に名前をユニークにし、ラジオボタンをグループ解除することです。ASP.NET GridViewのHtmlInputRadioButtonの名前をコードの後ろから設定します

これを無効にする方法はありますか?

編集 - ここで私は名前を設定しています方法は次のとおりです。

Private Sub gvFoo_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvSecPos.RowDataBound 
If Not (e.Row.RowType = DataControlRowType.DataRow) OrElse (e.Row.Cells(0) Is Nothing) Then 
    Return 
End If 
Dim drFoo As DataRowView = CType(e.Row.DataItem, DataRowView) 

Dim rbFoo As HtmlInputRadioButton = CType(e.Row.FindControl("rbFoo"), HtmlInputRadioButton) 
rbFoo.Name = "Foo" 'ASP.NET makes this unique which I do not want 
rbFoo.Value = "A Value" 

    End Sub 

は「 "106" により番号に代わり

<input type="radio" id="ctl00_ContentPlaceHolder1_ucFoo_gvFoo_ctl06_rbFoo" name="Foo" value="A Value"> 

<input type="radio" id="ctl00_ContentPlaceHolder1_ucFoo_gvFoo_ctl07_rbFoo" name="Foo" value="A Value"> 

のこのHTML

<input type="radio" id="ctl00_ContentPlaceHolder1_ucFoo_gvFoo_ctl06_rbFoo" name="ctl00$ContentPlaceHolder1$ucFoo$gvFoo$ctl06$Foo" value="A Value"> 

<input type="radio" id="ctl00_ContentPlaceHolder1_ucFoo_gvFoo_ctl07_rbFoo" name="ctl00$ContentPlaceHolder1$ucFoo$gvFoo$ctl07$Foo" value="A Value"> 

を生成し、それぞれのラジオボタンの名前に「107」を入力すると、グループが解除されます。

+0

での例を参照してください。名? – jrummell

+0

クライアント側の入力名 – Drahcir

+0

どのようにユニークなのですか?それは何が外に出るのですか? –

答えて

0
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    HtmlInputRadioButton control; 
    if (e.Row.RowType = DataControlRowType.DataRow) 
    { 
     control = e.FindControl("ControlID") as HtmlInputRadioButton; 

    } 
    control.name ="xyz" 
} 
1

代わりにプレーンラジオボタンを使用する必要があります。 <input type="radio" name="blahblah"/>

+0

変数の値に設定しているので、コードの背後にある名前を設定する必要があります – Drahcir

+0

いくつかのコレクションまたはリストをgridviewにバインドする場合、対応するクラスと ' '/>' –

+0

変数はデータソースからのものではありません – Drahcir

5

あなたは、私がRepeaterコントロール内のRadioButtonやHtmlInputRadioButtonのいずれかを用いて無線グループを定義しようとすると、同様の問題に遭遇したユニークID

private class MyHtmlInputRadioButton : HtmlInputRadioButton 
    { 
     public override string UniqueID 
     { 
      get 
      { 
       return string.IsNullOrEmpty(Name) ? base.UniqueID : Name; 
      } 
     } 
    } 
+0

なぜこれが答えとしてマークされていませんか?シンプルでエレガントな作品です。ありがとう@ igor-z – getsetcode

0

のゲッターをオーバーライドして、ラジオボタンの名前を上書きすることができます。 RadioButtonListは(私が既存のASP.NET WebFormsサイトにTwitter Bootstrapを適用していた)方法でレンダリングする必要があったため、私の場合はRadioButtonListは機能しませんでした。

JavaScriptを使用してjQueryを使用してUniqueID情報を削除しました。これは、ラジオボタンのname属性に固定されています。フォームの送信時に元のname属性を再適用します。元の名前を復元する必要があります。それ以外の場合は、ASP.NETがそれらのコントロールの状態を復元しようとしたときにPostBackでエラーが発生します。

この回避策は私のシナリオでうまくいきましたが、起こり得る副作用やエッジケースには注意してください。私がこれを適用したページはかなりシンプルでした。クライアント側の検証で動作するかどうかは検証しませんでした。ここで

は、私が使用するJavaScriptコードの例です:あなたは「名前」は、サーバー側制御IDまたはクライアント側の入力を意味しないと言うとき

$(function(){ 

    $('input.custom-radio-name').each(function(i, radio){ 
     var name = radio.name, 
      groupNameIndex = radio.name.lastIndexOf('$') + 1, 
      groupName = radio.name.substring(groupNameIndex); 
     // Preserve the original name, so that it can be restored 
     $(this).data('aspnetname', name); 
     radio.name = groupName; 
    }); 

    $('form').submit(function(){ 
     // Restore the name of the radio buttons, 
     // otherwise errors will ensue upon PostBack. 
     $('input.custom-radio-name').each(function(i, control){ 
      var aspnetname = $(this).data('aspnetname'); 
      control.name = aspnetname; 
     }); 
    }); 

}); 

http://jsfiddle.net/yumN8/

関連する問題