2011-01-06 14 views
3

Auf der RowDataBound Ereignis einer Gridview ich bin der Name der HtmlInputRadioButton innerhalb der GridViewRow. Das Problem ist, dass asp.net automatisch den Namen einzigartig macht und daher die Optionsfelder nicht gruppiert.ASP.NET Einstellung HtmlInputRadioButton Name in GridView von Code hinter

Gibt es eine Möglichkeit, dass ich das deaktiviere?

Bearbeiten - Hier ist, wie ich den Namen bin Einstellung:

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 

produziert dieses 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"> 

Statt

<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"> 

Durch die Zahlen "106" und " 107 "im Namen der jeweiligen Radiobuttons entgruppiert es sie.

+0

Wenn Sie sagen, „name“ meinen Sie die Server-seitige Steuer ID oder die Client-seitigen Eingang Name? – jrummell

+0

Clientseitige Eingabe Name – Drahcir

+0

Wie macht es es einzigartig? Was macht es aus? –

Antwort

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

Ich denke, Sie sollten stattdessen die einfache Radio-Taste verwenden. <input type="radio" name="blahblah"/>

+0

Ich muss den Namen aus dem Code zurück setzen, da ich ihn auf den Wert einer Variablen setze – Drahcir

+0

Wenn Sie eine Auflistung oder Liste an die Gridview binden, setzen Sie einfach eine Eigenschaft in der entsprechenden Klasse und '' –

+0

Die Variable stammt nicht von der Datenquelle, die sie von woanders ist – Drahcir

5

Sie können den Namen des Optionsfelds überschreiben, indem das Überschreiben der Getter der UniqueID

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

Warum ist das nicht als Antwort markiert?Einfach, elegant und es funktioniert. Danke @ igor-z – getsetcode

0

ich in ein ähnliches Problem lief dem Versuch, eine Radio-Gruppe entweder eine Radiobutton oder Htmlinputradiobutton innerhalb eines Repeater-Steuerelement mit definieren . Die RadioButtonList würde in meinem Fall nicht funktionieren, da der HTML-Code auf eine Weise gerendert werden musste, zu der die RadioButtonList nicht in der Lage war (ich habe Twitter Bootstrap auf eine vorhandene ASP.NET WebForms-Site angewendet).

Meine Problemumgehung verwendete JavaScript mit jQuery, um die UniqueID-Informationen zu entfernen, die an das name-Attribut der Optionsfelder angehängt wurden. Wenden Sie dann das ursprüngliche Namensattribut erneut an, wenn das Formular übergeben wurde. Der ursprüngliche Name muss wiederhergestellt werden, andernfalls tritt bei PostBack ein Fehler auf, wenn ASP.NET versucht, den Status dieser Steuerelemente wiederherzustellen.

Diese Umgehungs arbeitete in meinem Szenario in Ordnung, aber passen sie von allen möglichen Nebenwirkungen oder Grenzfälle. Die Seite, auf die ich das anwendete, war ziemlich einfach. Ich habe nicht überprüft, ob es mit der clientseitigen Validierung funktioniert. Hier

ist ein Beispiel für den JavaScript-Code, die ich verwendet:

$(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; 
     }); 
    }); 

}); 

Sehen Sie ein Beispiel an http://jsfiddle.net/yumN8/

Verwandte Themen