Is the default area for Html.BeginForm always the current area in ASP.NET MVC?
Asked Answered
L

1

8

I had the following piece of code in my Razor Layout view (which is shared by all views in my application):

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

This worked fine with my Home and Account views, i.e., it rendered a form that posted to ~/Account/Logout. However, when used with a view inside an area called "Person", it suddenly posted to ~/Person/Account/Logout.

Now, I was able to fix this as follows:

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

Is this the right way to do this, i.e., is the default area by definition the current area? Or am I having a configuration problem in my application?

Loire answered 6/6, 2013 at 19:51 Comment(1)
Yes this is the right way. You need the new { area = "" } because the default area is current area.Egocentric
A
3

It's the right way. ASP.NET MVC uses current route values in HTML helpers implicitly.That's also how you can get away with just stating the action name when you are linking to an action in the same controller. If you are linking to another area, you have to state it like this.

Actuality answered 6/6, 2013 at 19:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.