webForumDet fria alternativet

Ajax + cookies

.NET

10 svar · 429 visningar · startad av MagnusJ

Medlem sedan apr. 2004150 inlägg
Frågan#1

Tjena,

Jag har ett litet problem. Jag har en DropDownList som jag har för att ändra ett värde på en cookie. Den fungerar även som en trigger för att uppdatera en UpdatePanel, men när jag skriver ut värdet så är det så att den alltid är ett steg efter. Första gången jag markerar någonting så händer det ingenting och andra gången jag markar nått så blir värdet det jag markerade första gången. Vet någon hur man kan få till det? Jag tror att det har att göra med IsPostBack, så jag har provat att sätta dit det, men jag fick inte till det.

Medlem sedan feb. 2006511 inlägg
#2

Hur ser din kod ut? Det skulle nämligen hjälpa avsevärt!

Medlem sedan jan. 2007152 inlägg
#3

MagnusJ skrev:

Tjena,
Vet någon hur man kan få till det? Jag tror att det har att göra med IsPostBack, så jag har provat att sätta dit det, men jag fick inte till det.

Ja, antagligen, tänk på i vilken ordning till kod exekveras (pageload före en funktion kopplad till onclick i en button exempelvis).

Medlem sedan apr. 2004150 inlägg
#4

Jag har inte gjort så mycket än, utan bara försöker få det att funka. Så här ser koden ut

    <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
    <asp:ListItem>Välj...</asp:ListItem>
    <asp:ListItem>Ja</asp:ListItem>
    <asp:ListItem>Nej</asp:ListItem>
    </asp:DropDownList></p>

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        <asp:Label id="label1" runat="server"></asp:Label>
        </ContentTemplate>
            <Triggers>
            <asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />
            </Triggers>
            </asp:UpdatePanel>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!(Page.IsPostBack))
        {
            label1.Text = Request.Cookies["Varde"].Value;
        }
        else
        {
            label1.Text = Request.Cookies["Varde"].Value;
        }
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string strItem = DropDownList1.SelectedItem.Value;

        Response.Cookies["Varde"].Value = strItem;
        Response.Cookies["Varde"].Expires = DateTime.Now.AddYears(30);
    }

Sedan undrar jag lite om det går att fixa så att man inte kan markera ListItem Välj utan att den bara är där för att se vad det hela ska användas till.

Medlem sedan jan. 2007152 inlägg
#5

Den där if-satsen har du ingen nytta av... du gör ju samma sak oavsett om villkoret är sant eller falskt!! :p

Pageload körs _innan_ DropDownList1_SelectedIndexChanged, därför får du en eftersläpning. Med din lösning sätter du texten i din label till värdet som fanns i cookien innan den senaste ändringen. Så här kan du göra:


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            label1.Text = Request.Cookies["Varde"].Value;
       

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string strItem = DropDownList1.SelectedItem.Value;
        label1.Text = strItem;

        Response.Cookies["Varde"].Value = strItem;
        Response.Cookies["Varde"].Expires = DateTime.Now.AddYears(30);
    }
Medlem sedan apr. 2004150 inlägg
#6

Tackar, funkade perfekt.

Men jag har en liten till fråga. Vad kan man använda sig för något om man vill skriva ut värdet på flera ställen sedan att det inte ska skapas någon annan html-kod än det som skrivs ut?

Medlem sedan jan. 2007152 inlägg
#7

En asp:Literal genererar ingen annan kod än den text du stoppar in i den:

<asp:Literal id="Literal1" runat="Server" />

Medlem sedan apr. 2004150 inlägg
#8

Jao, men då kan man ju bara använda den på ett ställe, gick inte att ha samma id på flera taggar. Jag är lite beroende av att använda värdet på flera ställen.

Medlem sedan jan. 2007152 inlägg
#9

Då får du ha fler literals som du tilldelar samma värde.

Medlem sedan apr. 2004150 inlägg
#10

Vad jobbigt, det är så att jag håller på med en startsida och jag listar massa med länkar, sedan så väljer jag via en cookie om target ska vara _blank eller _self. Jag vet ju inte hur många länkar det är som ska visas så det blir svårt att ange literals. Har du nån idé på hur man kan lösa det?

Medlem sedan jan. 2007152 inlägg
#11

Ska du lista saker ska du använda någon av de listkontroller som finns, exempelvis en repeater eller en gridview.

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)