2014-01-16 11 views
0

я следующий маршрут определяетсяHtml.BeginForm рендеринга с действием «/»

routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
     ); 

Я тогда пытаюсь использовать Html.BeginForm ниже

 <% using (Html.BeginForm("Login", "Account", System.Web.Mvc.FormMethod.Post, new { @class = "login-form" })) 
     { %> 

Но это делает мне форму, как ниже

<form class="login-form" action="/" method="post"> 
    </form> 

Однако, если я изменить мои настройки на меня маршрут, чтобы быть что-то другое, как

 routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Login", id = UrlParameter.Optional } 
     ); 

Моей формы, то делает правильно, для информации я использую Html.BeginForm() в частичном виде, который возвращается из метода входа в системе на моем контроллере счета.

public class AccountController : Controller 
    { 

     public ActionResult Login() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Login(LoginModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       //TODO: Login user 
      } 
      return View(model); 
     } 
    } 

ответ

0

Фактически ожидается поведение. Фактически система маршрутизации довольно умна, и она знает запрос, который подходит для значений по умолчанию. (В вашем случае контроллер по умолчанию - это учетная запись, а действие по умолчанию - это логин, а в вашей начальной форме используется тот же контроллер и действие). Таким образом, система маршрутизации заменит ее на '/'.

Вы можете проверить это, просто добавив еще один контроллер, пусть говорят Admin и тот же вид Войти. И теперь просто замените контроллер на новый контроллер как

<% using (Html.BeginForm("Login", "Admin", System.Web.Mvc.FormMethod.Post, 
    new { @class = "login-form" })) 

Теперь вы будете иметь связь как

<form class="login-form" action="/Admin" method="post"></form> 

Там не будет никаких действий, так как система маршрутизации будет найти действие по умолчанию действие.

Благодаря

+0

Это на частичном представлении, которое отображается в представлении входа в систему контроллера учетной записи – user3118867

0

Поведение, которое вы замечаете, как ожидается, а также правильно. При создании ссылок MVC просматривает список маршрутов в коллекции маршрутов (сверху вниз) и видит, какие маршруты могут совпадать на основе данных маршрута, которые вы предоставляете в Html.BeginForm. Например, вы можете представить запрос, поступивший как POST /, и в этом случае вызывается действие входа в аккаунт вашего контроллера в связи с наличием значений по умолчанию.

+0

. Это то, что я ожидал увидеть, так как я работал над гибридом MVC и Webforms, я нашел некоторый старый код, который перенаправляет на старый веб-сайт входа форма, если какой-либо запрос пытается получить доступ к корню приложения. Большое спасибо – user3118867