Design pattern per mantenere diversi stati tra le schede del browser in una singola sessione

2

Ho un'app Web basata su MVC 4. Dove fornisco 2 tipi di accesso, 1. Dipendente e 2. Cliente. Con l'accesso al cliente, presento una dashboard e altre informazioni sui suoi ordini, ecc. Con l'accesso Employee, consento al dipendente di cercare i suoi clienti e fornire la possibilità di svolgere determinati compiti specifici del cliente.

È possibile che un dipendente dopo l'accesso possa cercare un numero di clienti e recuperare ciascuno dei suoi dettagli in più schede del browser.

Ho difficoltà a mantenere lo stato per ogni scheda, se inserisco l'identificativo univoco del cliente in sessione, poiché la successiva richiesta successiva sovrascriverà la sessione!

Per risolvere questo problema, mi sono basato su una soluzione (sporca) basata su viewbag, in cui ho impostato il numero cliente in viewbag in ogni vista.

C'è una soluzione elegante per risolvere questo? un modello di design noto?

    
posta Numan 05.06.2013 - 10:42
fonte

1 risposta

-1

Inserisci l'identificativo del cliente nell'URL, a la: http://yourApp/Customers/990023 (ID personalizzato = 990023)

Risposta espansa:

Per prima cosa, registra il parametro URL per l'ID cliente nel tuo metodo RouteConfig.RegisterRoutes() (trovato in RouteConfig.cs). Potrebbe assomigliare a questo:

routes.MapRoute(
                name: "Customer",
                url: "Customer/{action}/{id}",
                defaults: new { controller = "Customer", action = "Index", id = UrlParameter.Optional }
            );

Se ogni metodo nel controller del cliente richiede l'ID, ovvero se ogni azione richiede che tu abbia caricato un cliente valido, puoi rimuovere la parte id = UrlParameter.Optional .

Ora, i tuoi metodi nel controller del cliente cercheranno un segmento di URL alla fine dell'URL che si associa a un parametro chiamato id . Puoi accedervi con i tuoi metodi in questo modo:

// GET: /Customer/MakePayment/990023
public ActionResult MakePayment(string id)
{
    var makePayVModel = new MakePaymentViewModel();
    makePayVModel.LoadModelData(memberNumber);
    return View(makePayVModel);
    // or do whatever you want here.....
}

Finalmente, ecco un suggerimento. Quando hai a che fare con ActionLinks e cose simili, ad esempio da una visualizzazione cliente a un'altra, assicurati di inserire l'ID come parte dei valori di instradamento. Quindi se il tuo ViewModel per quella View ha una proprietà chiamata "Id" che rappresenta l'Id Cliente, il tuo link potrebbe apparire in questo modo:

@Html.ActionLink("Make a Payment", "MakePayment", new { id = Model.Id } )

Quale renderizza un tag in questo modo: <a href="http://yourApp/Customer/MakePayment/990023">Make a Payment</a>

    
risposta data 05.06.2013 - 19:02
fonte

Leggi altre domande sui tag