webForumDet fria alternativet

Hittar inte kontrollen med FindControl()

.NET

3 svar · 464 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#1

Nu var det ett tag sedan man sysslade med .NET-programmering. Men har hoppat på tåget nu igen och gör en survey-lösning.

Denna sida, är själv surveyn som visar respektive fråga med dess svar som betsår av en radiobuttonlist.

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Survey</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="questions" runat="server" OnItemDataBound="questions_ItemDataBound">
            <HeaderTemplate>
                <h1>Frågor att besvara</h1>
            </HeaderTemplate>
            <ItemTemplate>
                <p>
                <asp:Literal ID="question" runat="server"></asp:Literal><br />
                <asp:RadioButtonList ID="answer" runat="server"></asp:RadioButtonList>
                </p>
            </ItemTemplate>
        </asp:Repeater>
        <asp:Button runat="server" ID="BtnSubmit" OnClick="BtnSubmit_Click" />
    </div>
    <asp:Literal ID="test" runat="server" />
    </form>
</body>
</html>

I min codebehind har jag skapat en metod för submit-knappen:

protected void BtnSubmit_Click(Object sender, EventArgs e)
{
Answers a = new Answers();

// läs listan med svaren från radiolistan. 
// ... 
}

Har försökt att använda questions.FindControl("answer") för att försöka hitta den kontrollen, den som ligger i repeatern för att sedan hämta ut de svar som är förbockade. Men den inte hittar inte kontrollen..

Hur skall göra här för att jag skall få tag på mina svar från Radiobuttonlist som finns i repeatern?

Medlem sedan dec. 20014 239 inlägg
#2

Så här har jag gjort för att rätta ett prov jag gjort tidigare. Med just en repeater. Rätt eller fel vet jag inte med det fungerar iaf

  // Rätta almänna frågor
            foreach (DataListItem dli in DLFragor.Items)
            {
                _antalFragor++;
                Label lblFraga = (Label)dli.FindControl("FRAGALabel");

                RadioButtonList rbl = (RadioButtonList)dli.FindControl("rblsvar");
                HiddenField hFraga = (HiddenField)dli.FindControl("FragaNR");
                _fragaNr = int.Parse(hFraga.Value);
                string tmpSvar = rSvar.GetCorrectAnswer(_fragaNr, decimal.Parse(rbl.SelectedValue.ToString())).ToString();

                // Om jag får i retur så är det rätt svar och frågans id kommer fram
                if (!String.IsNullOrEmpty(tmpSvar))
                {
                    _antalRatt++;
                    lblFraga.BackColor = System.Drawing.Color.LightGreen;
                }
                else
                {
                    _felSvar += lblFraga.Text + "\r\r";
                    lblFraga.BackColor = System.Drawing.Color.LightPink;

                }

            }

Hoppas det hjälper dig i rätt riktning.

Medlem sedan nov. 20014 054 inlägg
#3

Jo tack... så klart man måste loopa igenom repeaterns items. :) Nu hittade jag kontrollen i alla fall, nu får jag inte ut något värde bara! Alltid kommer det ett nytt problem efter man har löst det där innan.

Kanske missat något.. men jag kan i alla fall räkna antalet items radiobuttonlist, så nog hittade man den alltid.. hehe..

Ah ja.. nu skall se om jag kan lösa det andra problemet.

Medlem sedan nov. 20014 054 inlägg
#4

Nåja det andra problemet var att jag helt enkelt bara glömt detta i Page_Load:

if(!IsPostback) {
 //..
}
262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)