Vra

Ek is besig met 'n projek bestuur web aansoek. Die gebruiker het 'n verskeidenheid van maniere om 'n lys van take vertoon. Wanneer jy 'n lys bladsy, hulle op taak en herlei word om die taak te wysig bladsy.

Sedert hulle kom uit 'n verskeidenheid van maniere, ek is net nuuskierig oor die beste manier om aanstuur die gebruiker terug na die roeping bladsy. Ek het 'n paar idees, maar wil graag ander ontwikkelaars insette te kry.

Wil jy die 'n beroep url in sessie te stoor? as 'n koekie? Ek hou van die konsep van die gebruik van 'n voorwerp hanteer die verwysing.

Was dit nuttig?

Oplossing

Ek sou die verwysing URL te stoor met behulp van die View State . Stoor dit buite die bestek van die bladsy (dit wil sê in die Sessie staat of koekie) kan probleme veroorsaak indien meer as een venster is oop.

Die voorbeeld hieronder bekragtig dat die bladsy intern genoem (dit wil sê nie direk versoek) en hop terug na die verwys bladsy na die gebruiker hul reaksie dien.

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.UrlReferrer == null)
        {
            //Handle the case where the page is requested directly
            throw new Exception("This page has been called without a referring page");
        }

        if (!IsPostBack)
        {   
            ReturnUrl = Request.UrlReferrer.PathAndQuery;
        }
    }

    public string ReturnUrl
    {
        get { return ViewState["returnUrl"].ToString();  }
        set { ViewState["returnUrl"] = value; }
    }

    protected void btn_Click(object sender, EventArgs e)
    {
        //Do what you need to do to save the page
        //...

        //Go back to calling page
        Response.Redirect(ReturnUrl, true);
    }
}

Ander wenke

Dit Boodskap my word gemerk asp.net maar ek dink dit is 'n platform onafhanklike kwessie dat alle nuwe web ontwikkelaars pyn as hulle soek 'n 'skoon 'n manier om dit te doen.

Ek dink die twee opsies in die bereiking van hierdie is:

  1. 'n param in die url
  2. 'n url gestoor in die sessie

Ek hou nie van die url metode, dit is 'n bietjie slordig, en jy moet onthou om die param in elke relevant URL in te sluit.

Ek wil net gebruik 'n voorwerp met statiese metodes vir hierdie. Die voorwerp sal draai rondom die sessie item wat jy gebruik om te stoor lei URL's.

Die metodes sal waarskynlik soos volg (alle openbare statiese):

  • setRedirectUrl (string URL)
  • doRedirect (string defaultURL)

setRedirectUrl sou genoem word in enige aksie wat links / vorms wat nodig het om te lei tot 'n gegewe url produseer. So sê jy het 'n projek te kan sien aksie wat 'n lys van projekte genereer, elk met take wat uitgevoer kan word op hulle (bv verwyder, te wysig) jy sou RedirectClass.setRedirectUrl noem ( "/ projek / view-all") in die kode vir hierdie aksie.

kan Toe sê die gebruiker te verwyder, wat hulle nodig het om te herlei word na die oog bladsy na 'n delete aksie, so in die delete aksie wat jy RedirectClass.setRedirectUrl ( "/ projek / view-all") sou noem. Hierdie metode sal kyk om te sien of die aanstuur veranderlike is gestig in die sessie. Indien wel lei tot die URL. Indien nie, lei na die verstek url (die string geslaag om die setRedirectUrl metode).

Ek stem saam met "rmbarnes.myopenid.com" met betrekking tot hierdie kwessie as platform onafhanklik.

Ek sou die roeping bladsy URL in die soektog string of in 'n verborge gebied (byvoorbeeld in View State vir ASP.NET) te stoor. As jy dit sal stoor buite die bladsy omvang (soos Sessie, globale veranderlike - Aansoek State en so aan). Dan sal dit nie net overkill as Tom sê wees, maar dit sal jy moeilikheid bring

Watter soort moeilikheid? Moeilikheid as die gebruiker het meer as een blad (venster) van daardie leser oop. Die oortjies (of vensters) van dieselfde leser sal dieselfde sessie waarskynlik deel en die herleiding sal nie die een verwag word en al die gebruiker sal voel, is dat dit 'n fout.

My 2 eurocent ..

Ek persoonlik sou die vereiste verwysing inligting in 'n voorwerp te slaan en te hanteer wêreldwyd. Ek sou verhoed dat die gebruik 'n soektog string param of dies meer, aangesien hulle kan probeer weerkaats hulself terug na 'n bladsy wat hulle is nie veronderstel om (moontlik sekuriteit probleem?). Jy kan dan 'n statiese metode om die verwysing voorwerp, wat die inligting kan lees en daarvolgens op te tree hanteer. Dit omvat jou verwysing proses binne een bladsy.

Die gebruik van 'n voorwerp beteken ook jy kan later verleng dit indien nodig (soos die byvoeg terugkeer boodskappe en ander inligting).

Byvoorbeeld (dit is 'n 2 minute rowwe riglyn BTW!):

public partial class _Default : System.Web.UI.Page 
{

    void Redirect(string url, string messsage)
    {
        RedirectionParams paras = new RedirectionParams(url, messsage);
        RedirectionHandler(paras); // pass to some global method (or this could BE the global method)
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Redirect("mypage.aspx", "you have been redirected");
    }
}

public class RedirectionParams
{
    private string _url;

    public string URL
    {
        get { return _url; }
        set { _url = value; }
    }

    private string _message;

    public string Message
    {
        get { return _message; }
        set { _message = value; }
    }

    public RedirectionParams(string url, string message)
    {
        this.URL = url;
        this.Message = message;
    }
}
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top