Domanda

Ho - penso - un URL complesso da gestire in ASP MVC 1.0: Tutte le mie azioni nella maggior parte dei controller richiedono sempre due parametri: Account e Progetto. Questo è in cima ai requisiti di ogni azione. Ciò significa che un URL tipico è così:

http://abcd.com/myaccount/projects/project_id/sites/edit/12

In questo esempio: il mio account è il nome dell'account. I progetti possono essere un controller, altre opzioni sono come sedi , dipendenti . project_id è l'id di un progetto in il mio account , siti potrebbe essere un controller, altre opzioni sono come staff o pagamenti . modifica è un'azione e 12 è l'id del sito modificato. (spero che sia abbastanza chiaro)

Ora un'opzione è quella di creare una route e passare project_id e account in tutte le azioni dei controller aggiungendo due parametri extra a tutte le azioni. Questo non è davvero desiderato e inoltre non sono sicuro che i due controller (progetti e siti) funzioneranno qui.

La mia situazione ideale è quella di utilizzare un qualche tipo di contesto che viaggia con la chiamata all'azione del controller e memorizzare project_id e il mio account. Il resto dei parametri può quindi essere trattato in modo normale come:

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

Qualche idea su come / dove ciò può accadere? Inoltre, come funzionerà con ActionLink (ovvero generando collegamenti corretti basati su questo contesto)?

Grazie!

È stato utile?

Soluzione

Devi prima aggiungere i token ai tuoi percorsi come {company} / projects / {project} {controller} / {action} / {id} . Quindi, se hai scritto il tuo IControllerFactory, sarebbe molto facile spingere i valori da RouteData nel controller tramite il costruttore o comunque volessi farlo. Probabilmente il modo più semplice per iniziare sarebbe sottoclassare DefaultControllerFactory e sovrascrivere il metodo CreateController.

Altri suggerimenti

Questo non ha proprio senso per me. Perché dovresti avere un percorso simile al seguente:

{controller}/{id}/{controller}/{id}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top