Avatar billede mmbn Nybegynder
02. februar 2006 - 11:31 Der er 11 kommentarer og
1 løsning

timeout - undgå postback

Applikationen udvikles som web til en pda. det vil sige at siden vises på en pda, ikke andet. Når en bruger så udfylder nogle felter, hvilket i det her tilfælde godt tage lang tid støder de nogen gange ind i timeout. Er der en måde (gerne dynamisk) hvorpå man enten kan lave et popup eller redirecte brugeren til login og derefter vende tilbage til siden, hvor alle oplysninger der var igang med at blive indtastet vil blive husket. Grunden til at jeg gerne vil have den dynamisk er at det skal være noget der kan bruges på rigtig mange sider og det ville være omkostningsfuldt at skulle ind og oprette variabler for alle textboxe radiobuttons osv på alle sider. Det jeg er kommet frem til indtil videre er (en control)(fra eggheadcafe):
using System;
using System.ComponentModel;
using System.Web;
using System.Web.Security;
using System.Web.UI;

namespace Utility.SessionControl
{
    /// <summary>
    /// Summary description for SessionTimeoutControl.
    /// </summary>
    [DefaultProperty("Text"),
    ToolboxData("<{0}:SessionTimeoutControl runat=server></{0}:SessionTimeoutControl>")]
    public class SessionTimeoutControl : Control
    {
        private string strRedirectUrl;

        [Bindable(true),
        Category("Appearance"),
        DefaultValueAttribute("")]
        public string RedirectUrl
        {
            get{return strRedirectUrl;}
            set{strRedirectUrl = value;}
        }

        public override bool Visible
        {
            get{return false;}
        }

        public override bool EnableViewState
        {
            get{return false;}
        }

        protected override void Render(HtmlTextWriter writer)
        {
            if(HttpContext.Current == null)
            {
                writer.Write("[*** SessionTimeout: " + this.ID + " ***]");
            }
            base.Render(writer);
        }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            if (this.strRedirectUrl == null)
                throw new InvalidOperationException("RedirectUrl Property Not Set.");
            if (Context.Session != null)
            {
                if (Context.Session.IsNewSession)
                {
                    string sCookieHeader = Page.Request.Headers["Cookie"];
                    if ((null != sCookieHeader) && (sCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                    {
                        if (Page.Request.IsAuthenticated)
                        {
                            FormsAuthentication.SignOut();
                        }
                        Page.Response.Redirect(this.strRedirectUrl);
                    }
                }
            }
        }
    }
}

Men hvordan kan jeg gemme de oplysninger der var blevet indtastet på siden før? eller undgå at redirecte og bare lade siden vises mens der pronmptes i et javascript popup?
Avatar billede mmbn Nybegynder
02. februar 2006 - 12:13 #1
der må helst ikke caches noget
Avatar billede anewbis Nybegynder
02. februar 2006 - 12:48 #2
Prøv at bruge repeater, kombineret med databind af de gamle værdier.

Men hvordan kan man bestemme hvad der skal opdateres i forbindelse med autopostback?
Avatar billede mmbn Nybegynder
02. februar 2006 - 13:11 #3
der skal ikke opdateres noget ved autopostback så vidt jeg ved
Avatar billede mmbn Nybegynder
02. februar 2006 - 13:15 #4
er det muligt at istedet for "Page.Response.Redirect(this.strRedirectUrl);", at åbne et vindue der prompter for login?
Avatar billede anewbis Nybegynder
02. februar 2006 - 14:34 #5
tja måske.
Avatar billede mmbn Nybegynder
02. februar 2006 - 14:36 #6
hvordan?
eksempelvis med javascript (og hvordan)?
Avatar billede dr_chaos Nybegynder
02. februar 2006 - 19:12 #8
Du skal bare teste det grundigt i firefox
Avatar billede mmbn Nybegynder
02. februar 2006 - 21:00 #9
Kanon det virker :) Smid et svar og lad være med at overstimulere din datter når du har hende alene ;)
Avatar billede mmbn Nybegynder
02. februar 2006 - 21:48 #10
Jeg ændrede i koden i kontrollen således at den så således ud:
Response.AddHeader("Refresh", Convert.ToString((Session.Timeout*60)-10));

istedet for:
Page.Response.Redirect(this.strRedirectUrl);

På button eller link eventet (eksempvis btn_click) kan man så bruge følgende (hvis det skulle gå galt og der ville komme timeout):
if(!System.Web.HttpContext.Current.Session.IsNewSession)
            {
                Page.Response.Redirect("test.htm");
            }
            else
            {
                Response.Write("<font color=#FF0000>Timeout prøv igen</font>");
            }

takker for ideen dr_chaos
Avatar billede dr_chaos Nybegynder
02. februar 2006 - 22:03 #11
svar
skal jeg nok. Hvis  du lader være med at overfodre din datter :)
Avatar billede mmbn Nybegynder
04. februar 2006 - 19:00 #12
:) må desværre alligevel ikke bruge netop den løsning. Er nødt til at promte brugeren for et login efter et timeout. Og den skal stadigvæk huske hvad der er indtastet på siden. Så et login i et eller andet popup ville være godt, imens siden under huskes som den er. Men du får selvfølgelig dine point alligevel :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester