2013-06-06 12 views
7

ho avuto il seguente pezzo di codice, a mio avviso Razor Layout (che è condiviso da tutte le viste nella mia applicazione):L'area predefinita per Html.BeginForm è sempre l'area corrente in ASP.NET MVC?

@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = ViewIDs.Shared._AuthenticationPartial.LogoutForm })) { 

questo ha funzionato bene con la mia casa e profilo è, cioè, reso una forma che pubblicato su ~/Account/Logout. Tuttavia, se utilizzato con una vista all'interno di un'area denominata "Persona", improvvisamente viene pubblicato in ~/Persona/Account/Esci.

Ora, sono stato in grado di risolvere questo problema come segue:

@using (Html.BeginForm("Logout", "Account", new { area = "" }, FormMethod.Post, new { id = ViewIDs.Shared._AuthenticationPartial.LogoutForm })) { 

È questo il modo giusto per fare questo, vale a dire, è l'area predefinita, per definizione, l'area attuale? O sto riscontrando un problema di configurazione nella mia applicazione?

+0

Sì, questo è il modo giusto. È necessario il 'new {area =" "}' perché l'area di default è l'area corrente. – nemesv

risposta

3

È la strada giusta. ASP.NET MVC utilizza in modo implicito i valori di instradamento correnti negli helper HTML. Inoltre, è possibile evitare di specificare semplicemente il nome dell'azione quando si esegue il collegamento a un'azione nello stesso controller. Se stai collegando ad un'altra area, devi indicarlo in questo modo.