Forum > ASP.NET 3.x > Språk - C#
Tjenare!
Sitter och loopar ut fyra stycken radiobuttons i en repeater, och vill lägga in värdet dessa genererar i en databas.
Själv databaskopplingen etc är redan färdigt, det jag vill veta är hur man hämtar värdet från radiobuttons, det är något lurigt med det.
min kod:
<asp:Repeater runat="server" ID="postQuestions" >
<HeaderTemplate>
...Fyra olika påståenden....
</HeaderTemplate>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "fraga") %>
<asp:RadioButton Value="3" Text="" class="radioPadding" GroupName="radioList" runat="server" />
<asp:RadioButton value="1" Text="" class="radioPadding" GroupName="radioList" runat="server" />
<asp:RadioButton value="2" Text="" class="radioPadding" GroupName="radioList" runat="server" />
<asp:RadioButton value="4" Text="" class="radioPadding" GroupName="radioList" runat="server" />
</ItemTemplate>
Hur hämtar jag värdet från dom? Ska jag använda RadioButtonList istället? Jag har letat och letat och letat efter lösningar, hittar inget som hjälper mig. Tack för hjälpen på förhand :)
| Skriv utÄr det i en postback du vill hämta värdena eller skickas du vidare till en annan sida för bearbetning av data när du trycker på submit?
Det är en knapp som hämtar fler frågor från en databas i detta fallet, det blir en "nästa sida"-grej av det.
Det jag vill göra är att spara datan användaren matat in innan jag hämtar fler frågor (tre frågor per sida visas), så man är alltid på samma sida.
Kollar jag runt så verkar de flesta använda en radiobuttonlist, jag själv kodar inte .NET så mycket, så jag vet inte riktigt vilket alternativ som är bäst, men med en sådan kod:
<asp:radiobuttonlist id="radio1" runat="server">
<asp:listitem id="option1" runat="server" value="Madrid" />
<asp:listitem id="option2" runat="server" value="Oslo" />
<asp:listitem id="option3" runat="server" value="Lisbon" />
</asp:radiobuttonlist>
Verkar det finnas en sådan lösning (källa):
if Page.IsPostBack then
Message.Text = "Du valt följande alternativ: " + radio1.SelectedItem.Value
end if
Sen verkar denna länk innehålla lite information om det du arbetar med också, källa.
Jag kollar på detta, sätter mig direkt :)
Edit: Skrev om det till följande:
i mitt webform:
<asp:radiobuttonlist id="radioList" runat="server">
<asp:listitem Value="3" Text="" class="radioPadding" GroupName="radioList" ID="option1" runat="server" />
<asp:listitem value="1" Text="" class="radioPadding" GroupName="radioList" ID="option2" runat="server" />
<asp:listitem value="2" Text="" class="radioPadding" GroupName="radioList" ID="option3" runat="server" />
<asp:listitem value="4" Text="" class="radioPadding" GroupName="radioList" ID="option4" runat="server" />
</asp:radiobuttonlist>
i codebehind
if (Page.IsPostBack)
{
Response.Write(radioList.SelectedItem.Value);
}
Får error på det; CS0103: The name 'radioList' does not exist in the current context
Tror det har med att göra att den är i en repeater, att den inte kan/vill se att den finns ännu eftersom den ännu inte blivit ut loopad, men det är bara en snabb tanke.
Har inte en aning om man ska göra någon form av loop som kollar igenom varje item i min repeater, men vet ej vart jag ska börja där. =/
Kan det vara så att du behöver använda dig av FindControl?
Nu har sagt nåt..! Ska kolla på detta imorn igen, är degig efter mycket pluggade idag.
Låter en foreach loop som kollar igenom min asp:reapeater efter alla items och i den hittar min radiobuttonlist vettigt?
Det låter som en möjlighet, men jag det är lite vad FindControl är menad att göra om jag förstod det rätt. Testa med den först och se ifall den löser ditt problem; för den ska söka igenom serverkontroller med hjälp av ID, därav din radiobuttonlist.
Funkar fortfarande inte, hittar inget alls:
foreach (RepeaterItem item in postQuestions.Items)
{
Control radioButtons = FindControl("radioList");
if (radioButtons != null)
{
// Get control's parent.
Control myControl2 = radioButtons.Parent;
Response.Write("Parent of the text box is : " + myControl2.ID);
}
else
{
Response.Write("Control not found ");
}
}
Får errorn som programmerats: Control not found.
Har testat att leta efter enskillda radiobuttons, min radiobuttonlist och en dummy-label som jag satte innanför min itemtemplate, och den hittat inget av dem. :S
Jag skulle gissa på att det här kan hjälpa dig. Jag har själv en laboration på universitetet nu som går ut på att tilldela ett värde i en länk som liger i en repeater som i sin tur ligger i ItemTemplate.
Det är som Shadi säger FindControl du skall använda dig utav.
Om jag hinner imorgon kan jag se om jag kan visa dig ett exempel hur jag gjorde, det bör inte vara någon större skillnad med en <asp:HyperLink> och det du vill få ut.
Det vore kanon om du kunde skicka upp koden, Sitter fast här. Har skickat till mina kompisar och lärare som är kompetenta inom området men alla kliar sig i huvudet som det ser ut som nu :S
Gjorde om min foreach lite granna:
foreach (RepeaterItem item in postQuestions.Items)
{
RadioButtonList radioButtons = (RadioButtonList)item.FindControl("radioList");
if (radioButtons != null)
{
Response.Write(radioButtons.SelectedItem.Value);
}
else
{
Response.Write("Control not found ");
}
}
Tack för all hjälp!
Nu ska jag bara lägg in allt i en databas och göra statistik över datan, så jag har en del kvar på denna modulen. ;) Koden ovan löste det mesta, spara den om ni vill tills den dagen ni behöver göra samma sak, för detta var fan inte roligt att sitta fast på. ;)
Va bra att du löste den. Tack för att du delade med dig av svaret, tror en del googlare kommer att ha nytta av den =)
Det är därför såna här forum finns, man ska dela med sig av all sin kod och hjälpa andra att lösa andra problem :)
Skulle ytterligare förklaring behövas är det bara att höra av sig! :D
Nu kommer jag till nästa huvudkliare dock, ska hitta vilken fråga man svarat på vid enkät-svaret. Har satt datasource till en dataTable med bland annat frågeID inräknat. Nu kommer problemet att hämta det värdet dock. Startar en ny tråd där vi kan diskutera fram nästa svar ;D Hoppas på att kunna lösa det själv innan det dock.
Tack ännu en gång för att hjälp! :)
Inga problem :)
Ja det är bara att skapa tråden så ska vi försöka lösa det problemet också!
Jag gjorde en riktig fuling. La in fragaID i en label i min repeater, där visible="false".
därefter hämtade jag värdet på samma sätt som jag hämtade radiobuttons. Börjar bli trött på projektet nu, och det ska endast vara en hi-fi prototyp så det får fasen blir bra nu. ;)