2016-06-10 11 views
3

Ich stehe vor einem Problem, bei dem das überprüfte geänderte Ereignis des ersten Optionsfelds nicht ausgelöst wird. Ich habe ViewState aktiviert, aber das Problem bleibt bestehen. siehe unten Code:ASP.NET-Optionsfeld aktiviert geändertes Ereignis, das für das erste Optionsfeld nicht ausgelöst wird

<span class="pull-right text-right"> 
    <label class="inline radio"> 
     <asp:RadioButton runat="server" ID="rdoViewAll" CausesValidation="false" GroupName="Filter" Text="View All" AutoPostBack="true" EnableViewState="true" Checked="true" /> 
    </label> 
    <label class="inline radio"> 
     <asp:RadioButton runat="server" ID="rdoViewCurrent" CausesValidation="false" GroupName="Filter" Text="View Current" AutoPostBack="true" /> 
    </label> 
    <label class="inline radio"> 
     <asp:RadioButton runat="server" ID="rdoViewFuture" CausesValidation="false" GroupName="Filter" Text="View Future" AutoPostBack="true" /> 
    </label> 
</span> 

Und ich bin Einstellung des geprüfte geänderte Ereignisses auf Page_Init wie folgt:

public void Page_Init(object sender, EventArgs e) 
{ 
    this.rdoViewAll.CheckedChanged += (s, a) => 
    { 
     RebindTerms(); 
    }; 
    this.rdoViewFuture.CheckedChanged += (s, a) => 
    { 
     RebindTerms(); 
    }; 
    this.rdoViewCurrent.CheckedChanged += (s, a) => 
    { 
     RebindTerms(); 
    }; 
} 

Eine Sache, die ich bemerkte, ist, wenn ich die Checked="true" Eigenschaft auf der ersten Radiobutton die CheckedChanged entfernen Ereignis wird erfolgreich ausgelöst. Allerdings muss der erste Optionsschalter standardmäßig beim Laden der Seite aktiviert werden.

+1

Ich glaube, Sie wussten bereits, dass Sie ein RadioButton in einer Gruppe nicht deaktivieren können, ohne ein anderes zu überprüfen. Damit wird das CheckedChanged-Ereignis nur auf das restliche Kontrollkästchen RadioButton und nicht auf das RadioButton, das bereits aktiviert ist, ausgelöst. In diesem Fall ist rdoViewAll der Standardwert. Das Ereignis wird nur für rdoViewFuture und rdoViewCurrent ausgelöst. –

+1

Ich schlage vor, dass Sie stattdessen Click-Ereignis verwenden. –

+0

@ Dr.Stitch - Der RadioButton hat kein Click-Ereignis, das in Code-Behind behandelt werden kann. – ConnorsFan

Antwort

2

Sie können Checked="false" für alle Radiobuttons lassen zunächst, und stellen Sie die ausgewählte Taste mit Client-Code:

private RadioButton selectedRadioButton; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    selectedRadioButton = rdoViewAll; 

    if (rdoViewCurrent.Checked) 
    { 
     selectedRadioButton = rdoViewCurrent; 
    } 

    if (rdoViewFuture.Checked) 
    { 
     selectedRadioButton = rdoViewFuture; 
    } 

    rdoViewAll.Checked = false; 
    rdoViewCurrent.Checked = false; 
    rdoViewFuture.Checked = false; 

    ClientScript.RegisterStartupScript(GetType(), "InitRadio", string.Format("document.getElementById('{0}').checked = true;", selectedRadioButton.ClientID), true); 
} 

Klick auf den Radiobutton wird das CheckedChanged Ereignis immer ausgelöst. Der RadioButton, der tatsächlich ausgewählt ist, wird in selectedRadioButton gespeichert, wenn Sie es in anderen Teilen des Servercodes benötigen.

+0

Danke das Client-Skript hat den Trick hier! –

+0

Hallo zusammen, ich habe jetzt ein Problem mit dem obigen Code. Es funktioniert nicht, wenn nach wenigen Postbacks das erste Optionsfeld ein zweites Mal ausgewählt wird. Irgendeine Idee, was könnte das Problem sein? –

+0

Ich habe meine Antwort so geändert, dass das Ereignis jedes Mal ausgelöst wird, wenn Sie auf ein RadioButton klicken, auch wenn es bereits ausgewählt ist. – ConnorsFan

Verwandte Themen