2009-03-25 11 views
0

Ich denke, das ist wohl das frustrierendste, was ich jemals in Webformularen gemacht habe. Aber man würde meinen, es wäre das Einfachste von allen Dingen auf der Welt. Das ist das:2 Gegenseitig exklusive RadioButton "Listen"

Ich brauche 2 separate Listen von Radiobuttons auf meiner .aspx-Seite. Ein Satz ermöglicht einem Kunden, eine Option auszuwählen. Das andere Set tut aber auch für einen anderen Zweck. Aber nur ein Set kann einen ausgewählten Radiobutton haben.

Ok Ich habe dies mit 2 asp.net Radiobuttonlists Kontrollen auf der gleichen Seite versucht. Bekam den groben Fehler mit GroupName (asp.net weist die uniqueID des Controls zu, was verhindert, dass der Gruppenname jemals funktioniert, weil 2 Radiobuttonlists nicht den gleichen Gruppennamen für alle Radiobuttons haben können, da jede Radiobuttonliste eine andere uniqueID hat eindeutige ID als Namensattribut, wenn die Schaltflächen gerendert werden, da die Namensgruppen unterschiedlich sind, schließen sie sich nicht gegenseitig aus. Wie auch immer, also habe ich dieses benutzerdefinierte RadioButtonListcontrol erstellt und dieses groupname Problem behoben.

Aber als endete passiert, wenn ich ging, um 2 Instanzen meiner neuen benutzerdefinierten Radiobuttonlist-Steuerelement auf meiner .aspx-Seite, alles war schwell, bis ich bemerkte, dass jedes Mal für Radiobuttonlist1.SelectedValue oder Radiobuttonlist2.SelectedValue (did egal, was ich überprüft habe) der Wert spuckte immer string.empty zurück und ich konnte nicht herausfinden warum (siehe http://forums.asp.net/t/1401117.aspx).

Ok auf den dritten Versuch heute Abend und in die Morgendämmerung (kein Schlaf). Ich versuchte stattdessen nur zu versuchen, 2 benutzerdefinierte radiobuttonlists wegen dieses string.empty Problems insgesamt zu verwenden und zu versuchen, 2 Sätze radiobuttonlists auszuspucken, indem ich 2 asp.net Repeater und ein Standardeingabe-HTML-Tag innerhalb verwendete. Hab das gemacht. Ok, aber die 2 Listen schließen sich immer noch nicht gegenseitig aus. Ich kann einen Wert in den ersten Radiobuttons von Repeater1 auswählen und das gleiche gilt für Repeater2. Ich kann nicht für das Leben von mir die "Sätze" zu einander ausschließenden Sets von Radiobuttons bekommen.

+0

können Sie die entsprechende asp.net und Code hinter Code schreiben? –

+0

http://forums.asp.net/t/1401117.aspx – user72603

+0

Wenn ich dieses Problem mit der leeren Zeichenfolge nicht jedes Mal hatte, wäre ich gut zu gehen und könnte einfach die ID überprüfen, um zu sehen, ob es eine hat selectedValue, die viel sauberer wäre als das Anhängen eines Indexes wie jeder andere sagt zu einem Standard-Eingang Radio-Kontrolle Wert – user72603

Antwort

4

Da Sie zwei Gruppen von Optionsfeldern haben, die als eine Gruppe von Optionsfeldern fungieren sollen, ist die Lösung einfach: Machen Sie eine Gruppe von Optionsfeldern. Das einzige Problem, das Sie dann haben, ist, dass der Wert, den Sie erhalten, den gleichen Namen aus beiden Listen hat, aber das kann gelöst werden, indem Sie den Werten ein Präfix hinzufügen, damit Sie leicht erkennen können, aus welcher Liste die Option kommt.

+0

Also ja, ich muss mir vielleicht keine Sorgen um die DB-Sache machen, wenn ich mit zwei separaten Bindungen binden kann, solange das Attribut "name" dasselbe ist. Ich werde einfach so vorgehen müssen wie du gesagt hast etwas das ich im Code hinterher ausstreifen kann und überprüfe ob der Wert es hat zu bestimmen, welche Liste eine Auswahl hat. – user72603

+0

Es scheint nur "hacky" Code zu mir zu halten und Kontrollen auf 2 Listen wie folgt. Ich mag es nicht. – user72603

+0

@unknown: Sie müssen die Werte nicht in derselben Datenbanktabelle speichern, nur um den gleichen Namen für die HTML-Tags zu verwenden. Das Trennen des Präfixes vom Wert ist eine sehr einfache Zeichenfolgenoperation. – Guffa

2

Update: basierend auf der neuen Info als Antwort geschrieben. Die Option, die ich auf meiner ursprünglichen Antwort vorgeschlagen entspricht die 3. Sie wirklich folgend beachten müssen:

  • Html Radio-Buttons haben nur 1 eingebauten Mechanismus die Exklusivität, was der Name ist zu handhaben.
  • Sie fordern ausdrücklich eine no js Lösung an, also müssen Sie die Ids manipulieren, um das zu erreichen. Wenn du diese Option nicht blockierst, bin ich mir sicher, dass jemand eine nette jquery oder js-Bibliothek finden würde, die das bereits unterstützt.
  • Die Option 3 ist eindeutig weniger invasiv, da Sie nicht gezwungen sind, die tatsächlichen Daten zu beeinflussen, und nicht von zukünftigen Aktualisierungen betroffen sind.

Es ist nicht so viel Code, nur etwas mehr auf der Liste Indizes und einige einfache Sache wie:

int? list1Value = null; 
int? list2Value = null; 
var value = Request.Form["somegroup"]; 
if (value.StartsWith("List1")) 
    list1Value = int.Parse(value.Substring(5)); 
else 
    list2Value = int.Parse(value.Substring(5));//Assuming List2 as prefix 

Original:

ich Ihre andere Frage sah, und Sie müssen Sie nur den gleichen Gruppennamen verwenden. Stellen Sie sicher, dass Sie für alle Elemente unterschiedliche Werte haben, unabhängig von der Liste, aus der sie stammen. Eine Möglichkeit, dies zu erreichen, ist das Hinzufügen von Werten zu den Werten, z. B .: <% # "List1-" + Eval ("ID")%> und Ändern des Codes, der Ihr Request.Form ["yourgroupname"] liest.

+0

Wieder der gleiche Gruppenname erfordert, dass alle meine Daten sein in einer SQL-Tabelle gehalten. Es bedeutet auch jetzt in meinem Code, wenn ich jemals sehen möchte, ob Benutzer eines der Elemente 1-4 (unter der Annahme eines Satzes von 4) oder 5-9 (das andere innerhalb desselben Gorup) ausgewählt habe, muss ich alle möglichen Dinge tun funky Überprüfung der Werte statt check ctrl – user72603

+0

@unknown wie gesagt, Sie würden wie <% # "List1-" + Eval ("ID")%> und <% # "List2-" + Eval ("ID") binden %>, keine Notwendigkeit für die tatsächlichen Daten, unterschiedliche IDs zu haben. Wenn Sie es aus dem Request.Form lesen, überprüfen Sie zuerst, ob es in List1 oder List2 war, und verwenden Sie dann die ID im entsprechenden Kontext/Code. – eglasius

0

Ich denke, Sie sollten RadioButtons anstelle von RadioButtonLists verwenden.

Here's an article, die eine Lösung zum Beheben des Problems der Radiobutton-Namensgebung darstellt.

+0

Niemand versteht. Ich hab's gemacht. Aber das bedeutet, dass alle deine Werte in einer Gruppe sein müssen und sie "apppear" getrennt machen müssen. Ich habe das getan. Das bedeutet, dass sowohl Ihre Codeüberprüfungen als auch die Daten gehackt werden müssen, damit dies funktioniert. Ihre Schecks müssen jetzt gegen eine Reihe von Indizes statt 2 Ctrls sein – user72603

+0

ja, ich habe diesen Artikel gesehen. Die Tasten in die gleiche Gruppe zu bekommen, ist nicht das Problem.Ich sagte, es habe versucht, die 2 Listen komplett getrennt zu verwalten, was mit Radiobuttons nicht möglich ist, weil alle denselben Gruppennamen haben müssen. – user72603

0

Obwohl dieser Beitrag vor 1 Jahr bereits datiert ist, lese ich es nur, weil ich das gleiche Problem habe.

Zur Zeit habe ich 1-Lösung mit jQuery:

Client-seitiges Script (Sie müssen auch jQuery enthalten)

 function SetRadio(rb) { 
     $('input:checked').attr('checked', false); 
     rb.checked = true; 
    } 

Für jeden Radiobutton (die eine listitem in einem Radiobuttonlist ist) I Fügen Sie die folgenden auf die serverseite:

Für mich funktioniert das in IE und Firefox, mit 3 radiobuttonlists, ohne Gruppennamen zu verwenden. Sie können jede Radiobutton-Liste für einen ausgewählten Eintrag/Wert überprüfen, oder Sie können die SetRadio-Funktion erweitern, sodass der ausgewählte Wert in einem ausgeblendeten Feld gespeichert wird.

Grüße, M