2013-12-17 3 views
1

Я новичок в mvc, и у меня есть ситуация, когда я убежден, что правильно картирую маршрут, хотя это не так.route not mapping mvc 3

Это очень простая форма входа с возможностью передачи параметров.

это HTML

<li><a href="@Url.Action("LoginForm", "Home", new {userName="user"})">Login</a></li> 

и это метод действия контроллера 'Главная'

public ViewResult LoginForm(string userName) 
    { 

     return View(); 
    } 

Это как моя попытка отображения маршрута

routes.MapRoute(
      null, 
      "Login/{userName}", 
      new { controller = "Home ", action = "LoginForm", UrlParameter.Optional } 
      ); 

Адрес, однако, отображается следующим образом:

/Home/LoginForm?loginUser=user 

моя цель будет следующий

Login/user 

советы, возможно, почему это не отображение правильно. Я уже зарегистрировал несколько маршрутов в файле Global.asax.cs. Может ли это иметь какое-то отношение к порядку, в котором они были зарегистрированы?

+0

Похоже, вы указываете «userName» в своем MapRoute, но вы передаете объект, называемый «loginUser» .... Вам нужно называть их одним и тем же именем. – Subby

+0

+1 для хорошего объяснения с кодом. – Subby

+0

Привет. Благодарю. Сделали коррекцию, но по-прежнему имеют ту же проблему. – Arianule

ответ

0

Вы ударяете другой адрес, отличный от указанного в MapRoute. Маршрут сопоставления не будет срабатывать. Измените и параметр, и имя действия.

<li><a href="@Url.Action("Login", "Home", new {userName="user"})">Login</a></li> 

Вы должны получить доступ к /Home/Login не /Home/LoginForm. Маршрутизация выполняется автоматически , если имеет доступ к правому адресу.

EDIT: После адресного редактирования:

  • Насколько я знаю, вы не можете создать ссылку, такие как Login/{userName} использования Url.Action; если не указан контроллер, по умолчанию в Home контроллер
  • Однако вы можете получить доступ к Login/{userName} ссылке непосредственно из браузера (в связи с отображенным маршрутом)
  • Вы можете создать «статический» (т.е.классический) ссылка, пройдя жестко запрограммированный адрес:
    <li><a href="/Login/user">Login</a></li>

Пожалуйста, обратите внимание, что userName добавлены/удалены на JavaScript.

+0

Может ли проголосовавший проголосовать за причину? –

3

Попробуйте это:

<li><a href="@Url.Action("LoginForm", "Home", new {userName="user"})">Login</a></li> 

изменение параметра loginUser к имя_пользователя.

+1

Привет. Благодарю. Сделали коррекцию, но по-прежнему имеют ту же проблему. Спасибо в любом случае – Arianule

1

Использование имя_пользователя вместо loginUser

<li><a href='@Url.Action("LoginForm", "Home", new {userName="user"})'>Login</a></li>