Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[c#/asp.net] htmlinputradiobutton niet als groep in repeater

Pagina: 1
Acties:

  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
Ik heb een repeater met daarin een RadionButton of een HtmlInputRadioButton (beide werken niet goed). Per rij worden er een aantal getoond die moeten functioneren als een groep alleen heeft een repeater de ziekelijke eigenschap op zelf een naar te verzinnen:

code:
1
name="rptVragen:_ctl2:rptAntwoorden:_ctl1:vraag_2"


Nu denk ik slim te zijn en tijdens het binden van de repeater (late binding) te zoeken naar 1 van beide en de Name-property (HtmlInputRadioButton) of de GroupName-property (RadioButton) te zetten. Dat zou per Regel "Vraag_1" of "Vraag_2" etc moeten worden. Tijdens het debuggen wordt deze inderdaad gezet maar als ik naar het resultaat kijk wijkt dat nogal af:

code:
1
2
3
<input value="4" name="rptVragen:_ctl2:rptAntwoorden:_ctl1:vraag_2" id="rptVragen__ctl2_rptAntwoorden__ctl1_htmlRadioButton1" type="radio" />nee
<input value="5" name="rptVragen:_ctl2:rptAntwoorden:_ctl2:vraag_2" id="rptVragen__ctl2_rptAntwoorden__ctl2_htmlRadioButton1" type="radio" />weet niet
<input value="6" name="rptVragen:_ctl2:rptAntwoorden:_ctl3:vraag_2" id="rptVragen__ctl2_rptAntwoorden__ctl3_htmlRadioButton1" type="radio" />ja


Dat zou toch echt het volgende moeten zijn

code:
1
2
3
<input value="4" name="vraag_2" id="rptVragen__ctl2_rptAntwoorden__ctl1_htmlRadioButton1" type="radio" />nee
<input value="5" name="vraag_2" id="rptVragen__ctl2_rptAntwoorden__ctl2_htmlRadioButton1" type="radio" />weet niet
<input value="6" name="vraag_2" id="rptVragen__ctl2_rptAntwoorden__ctl3_htmlRadioButton1" type="radio" />ja


Heeft iemand een idee hoe ik dit kan oplossen of waar dat aan ligt..

https://k1600gt.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:51

gorgi_19

Kruimeltjes zijn weer op :9

Het ligt aan de INamingContainer, kan je niets aan doen en de enige optie is om een custom radiobutton te maken c.q. te downloaden. Volgens MS is het by design, volgens de rest is het een bug.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
gorgi_19 schreef op maandag 08 oktober 2007 @ 15:14:
Het ligt aan de INamingContainer, kan je niets aan doen en de enige optie is om een custom radiobutton te maken c.q. te downloaden. Volgens MS is het by design, volgens de rest is het een bug.
Aangezien ik bij "de rest" hoor is het dus een bug :+

Ik wel een hele vage MS workaround gevonden inmiddels maar ik vraag me af of die de viewstate gebruikt. Dit ivm postback:

http://www.asp.net/learn/data-access/tutorial-51-cs.aspx

Het is wel een 2.0 document (ik gebruik zelf 1.1) maar het gaat om het principe..

https://k1600gt.nl


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Kan je niet gebruikmaken van het RadioButtonList Control?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:51

gorgi_19

Kruimeltjes zijn weer op :9

Die werkt niet met een repeater.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
Nou het werkt met het injecteren van die input-tag maar dan bewaard ie niet de viewstate. Dat moet je met het nodige kunst en vliegwerk regelen :r

https://k1600gt.nl


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 09:58
For-loopje maken op het data-object en dan vervolgens handmatig controls opbouwen? Is dat een optie? Of zit je vast aan die repeater?

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Ik gebruik dan met ASP.NET 2.0, maar dit werkt bij mij prima:

Default.aspx
C#:
1
2
3
4
5
6
7
8
9
10
<asp:Repeater runat="server" ID="MyRepeater">
    <ItemTemplate>
        <%# DataBinder.Eval(Container, "DataItem") %>
        <asp:RadioButtonList runat="server" RepeatDirection="Horizontal">
            <asp:ListItem Text="Ja" Selected="True"/>
            <asp:ListItem Text="Nee" />
            <asp:ListItem Text="Weet Niet" />
        </asp:RadioButtonList>
    </ItemTemplate>
</asp:Repeater>


Default.aspx.cs:
C#:
1
2
3
4
5
6
protected void Page_Load(object sender, EventArgs e)
{
    string[] vragen = { "vraag1", "vraag2", "vraag3" };
    MyRepeater.DataSource = vragen;
    MyRepeater.DataBind();
}


Of is juist het uitlezen je probleem?

[ Voor 8% gewijzigd door riezebosch op 11-10-2007 17:06 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:51

gorgi_19

Kruimeltjes zijn weer op :9

Het gaat over een radiobutton in een repeater, niet een radiobuttonlist.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
gorgi_19 schreef op dinsdag 09 oktober 2007 @ 15:55:
Het gaat over een radiobutton in een repeater, niet een radiobuttonlist.
Daarom ook mijn eerdere post :P

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 09:58
Bekijk nog even goed het voorbeeld en wat de topicstarter daarover heeft gezegd. Wat hij wil gaat niet werken. Ik denk dat je het probleem niet helemaal begrijpt.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Dennis schreef op dinsdag 09 oktober 2007 @ 16:33:
[...]

Bekijk nog even goed het voorbeeld en wat de topicstarter daarover heeft gezegd. Wat hij wil gaat niet werken. Ik denk dat je het probleem niet helemaal begrijpt.
Dat zou goed kunnen. Ik dacht dat zijn probleem is dat hij het groeperen niet voor elkaar krijgt, dus stel ik voor een RadioButtonList te gebruiken.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 09:58
riezebosch schreef op dinsdag 09 oktober 2007 @ 16:52:
Dat zou goed kunnen. Ik dacht dat zijn probleem is dat hij het groeperen niet voor elkaar krijgt, dus stel ik voor een RadioButtonList te gebruiken.
Het probleem is dat om te groeperen, het name-attribuut wordt gebruikt in html. Echter, asp.net voegt een prefix toe als je een radiobutton binnen een iteratief asp.net control gebruikt, zoals bijvoorbeeld de DataList of de Repeater. De browser weet dan vervolgens niet meer dat de html-elementen bij elkaar horen en dus werkt het niet.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Dennis schreef op dinsdag 09 oktober 2007 @ 17:00:
[...]

Het probleem is dat om te groeperen, het name-attribuut wordt gebruikt in html. Echter, asp.net voegt een prefix toe als je een radiobutton binnen een iteratief asp.net control gebruikt, zoals bijvoorbeeld de DataList of de Repeater. De browser weet dan vervolgens niet meer dat de html-elementen bij elkaar horen en dus werkt het niet.
En met het RadioButtonList control werkt dat dus weer wel... Tenminste, wat ik liet zien werkt het dat bij iedere vraag een groepje radiobuttons getoond worden die ook als groep fungeren. Of het uitlezen van geselecteerde waardes ook nog makkelijk werkt weet ik echter niet...

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 09:58
Je hebt gelijk riezebosch. Ik had de vraagstelling zo gelezen dat per regel van de repeater één radiobutton moet komen die dan gezamenlijk als een groep opereren, maar de topicstarter wil blijkbaar dus meerdere items per vraag. Het lijkt me dat jouw voorbeeld dan gewoon een goede oplossing is :).

Misschien kan topicstarter aangeven of dit inderdaad kan of misschien wel een reden waarom hij de radiobuttonlist niet zou kunnen/willen gebruiken (er is een redelijk vast opmaakstramien, dat is een nadeel).

  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
Ik zie wat onduidelijkheid over de vraag - ik heb het al opgelost maar wil e.e.a. toch ff verder toelichten dan

Het scherm komt er als volgt ongeveer zo uit te zien:

code:
1
2
3
4
5
6
7
8
Vind je dit goed ?
    O ja      O weet niet   O nee

Vind je dat leuk ?
    O ja      O weet niet   O nee

Vind je dat mooi ?
    O ja      O weet niet   O nee


Iedere vraag heeft een uniek id en ieder antwoord heeft een uniek id. Er is dus een tabel die bijhoudt welke mogelijke antwoorden bij een vraag horen. Het eerste setje ziet er dus als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
<!-- Vraag_1 -->
<input type="radio" name="vraag_1" id="antwoord_1" />
<input type="radio" name="vraag_1" id="antwoord_2" />
<input type="radio" name="vraag_1" id="antwoord_3" />

<!-- Vraag_2 -->
<input type="radio" name="vraag_2" id="antwoord_4" />
<input type="radio" name="vraag_2" id="antwoord_5" />
<input type="radio" name="vraag_2" id="antwoord_6" />

...enz enz...


Na de postback (submit) sla ik de antwoorden van de vragen op in een hidden field ("antwoord_2;antwoord_5;antwoord_10;". Deze control heb ik server-side gemaakt waardoor deze op de client weer uit te lezen zijn met jscript. Na de postback wordt de pagina natuurlijk weer geladen zonder de juiste waardes voor de radio input boxen maar de antwoorden staan ingevuld in het hidden veld. Via jscript (split en een for lusje) maak ik de antwoorden checked.

antwoord_1 is antwoordid =1. omdat alles met relaties aan elkaar hangt hoef ik dus niet te checken bij welke vraag het hoort (dat is namelijk toch al bekend)

Ik heb er verder nog een controle ingevoerd dat alle vragen (radio groepen) ingevuld moeten zijn maar dat is voor de juiste werking niet noodzakelijke.

Alles wordt weergegeven via een geneste repeater. Eerst repeater voor de vragen, tweede voor de antwoorden die kunnen worden geselecteerd..

[ Voor 9% gewijzigd door shades op 11-10-2007 13:14 ]

https://k1600gt.nl


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 09:58
Duidelijke toelichting shades.

Kijk, riezebosch heeft een punt hierboven door te stellen dat je een RadioButtonList kunt gebruiken. Het probleem met de name-properties die niet gelijk zijn is dan verholpen. Dus in zoverre is je probleem dan opgelost.

Een ander dilemma krijg je er wel weer bij. Die RadioButtonList kent een vast opmaakpatroon. Als je dus een tabel wilt hebben die zijwaarts gaat, kun je de opmaak misschien niet zo in je lay-out krijgen als dat je had gewild. De vraag is dus of dat voor jou van toepassing is, shades.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:51

gorgi_19

Kruimeltjes zijn weer op :9

Wat is er mis met een custom control als http://www.metabuilders.com/tools/GlobalRadioButton.aspx ?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
Dennis schreef op donderdag 11 oktober 2007 @ 13:17:
Duidelijke toelichting shades.

Kijk, riezebosch heeft een punt hierboven door te stellen dat je een RadioButtonList kunt gebruiken. Het probleem met de name-properties die niet gelijk zijn is dan verholpen. Dus in zoverre is je probleem dan opgelost.

Een ander dilemma krijg je er wel weer bij. Die RadioButtonList kent een vast opmaakpatroon. Als je dus een tabel wilt hebben die zijwaarts gaat, kun je de opmaak misschien niet zo in je lay-out krijgen als dat je had gewild. De vraag is dus of dat voor jou van toepassing is, shades.
Aanpassen horizontaal of verticaal is een kwestie van de layout van de geneste repeater aan passen. Verandert de code niet mee.Dat is dus niet het probleem.

Ik zal die radiobuttonlist nog een keer proberen als ik tijd heb maar volgens mij had ik dat al een keer geprobeerd.
euh...
...waarschijnlijk niets maar ik was me niet bewust van het bestaan. Ik ga deze zeker proberen (als ik tijd heb). Ben met prototype bezig en dat moet snel ook al is het code-technisch ruk ;) optimalizeren kan later als er tijd voor wordt vrijgemaakt.

[ Voor 20% gewijzigd door shades op 11-10-2007 15:29 ]

https://k1600gt.nl


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Het ziet er naar uit dat die nou juist doet wat niet de bedoeling is: een globale radiobutton. De TS wil juist per vraag een group aanmaken zodat er per vraag 1 antwoord mogelijk is.

De RadioButtonList doet precies wat gevraagd wordt, alleen heeft Dennis wel gelijk dat je daarin weinig aan kunt passen wat betreft layout. Alle elementen worden in een tabel gestopt en op een aparte rij weergegeven. Anders was er wel nog met CSS het eea aan te verbouwen.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
riezebosch schreef op donderdag 11 oktober 2007 @ 15:41:
[...]

Het ziet er naar uit dat die nou juist doet wat niet de bedoeling is: een globale radiobutton. De TS wil juist per vraag een group aanmaken zodat er per vraag 1 antwoord mogelijk is.

De RadioButtonList doet precies wat gevraagd wordt, alleen heeft Dennis wel gelijk dat je daarin weinig aan kunt passen wat betreft layout. Alle elementen worden in een tabel gestopt en op een aparte rij weergegeven. Anders was er wel nog met CSS het eea aan te verbouwen.
ja - dat is waar. Ik vind dat ik het wel slim heb opgelost eigenlijk. Ben eigenlijk niet zo scheutig met dat soort uitspraken maar toch. Ik heb wel gebruik gemaakt van de volgende informatie.
shades in "\[c#/asp.net] htmlinputradiobutton niet a..."
en http://aaron.xavisys.com/...e-value-of-a-radio-group/ (maakt gebruik van de prototype.js library)

https://k1600gt.nl


Verwijderd

Aan je pagina toevoegen van het volgende javascript:

<script language="javascript" type="text/javascript">
function SetUniqueRadioButton(nameregex, current)
{
re = new RegExp(nameregex);
for(i = 0; i < document.forms[0].elements.length; i++)
{
elm = document.forms[0].elements[i]
if (elm.type == 'radio')
{
if (re.test(elm.name))
{
elm.checked = false;
}
}
}
current.checked = true;
}
</script>

vervolgens in de onitemdatabound voor elke radiobutton dit script binden

zie het volgende artikel: //http://www.codeguru.com/csharp/csharp/cs_controls/custom/article.php/c12371/

werkt perfect

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
shades schreef op donderdag 11 oktober 2007 @ 16:39:
[...]


ja - dat is waar. Ik vind dat ik het wel slim heb opgelost eigenlijk. Ben eigenlijk niet zo scheutig met dat soort uitspraken maar toch. Ik heb wel gebruik gemaakt van de volgende informatie.
shades in "\[c#/asp.net] htmlinputradiobutton niet a..."
en http://aaron.xavisys.com/...e-value-of-a-radio-group/ (maakt gebruik van de prototype.js library)
Ik zie nu dat de RadioButtonList control de RepeatDirection op Horizontal kan, en dat precies doet wat jij wil... Mij lijkt die oplossing dan stukken beter dan het zelf bouwen :)

Zie ook mijn eerdere post.

[ Voor 3% gewijzigd door riezebosch op 11-10-2007 17:08 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack

Pagina: 1