проблема с маршрутизацией в asp.net mvc3 - PullRequest
0 голосов
/ 06 июля 2011

У меня есть страница по умолчанию / Home / Index.На этой странице у меня есть ссылка для выхода из системы:

@Html.ActionLink("LogOut", "LogOut", new { controller="Users" })

Когда я нажимаю на эту ссылку, отладчик переходит к контроллеру по умолчанию, что означает «Домой» и «Индекс действия».Это мой маршрут

routes.MapRoute(
         "LogOut", // Route name
         "Users/LogOut", // URL with parameters
         new { controller = "Users", action = "LogOut" }
         );

routes.MapRoute(
         "Default", // Route name
         "{controller}/{action}", // URL with parameters
         new { controller = "Home", action = "Index" } // Parameter defaults
         );

Что здесь не так?Почему он не идет к соответствующему контроллеру и действию?

[EDIT] Из кода js я могу выйти из системы, используя

$.post('/Users/LogOut',function(){
window.location.replace("/Home/Index");
});

Мое действие LogOut простое

public ActionResult LogOut()
        {
            string login = HttpContext.User.Identity.Name;    
            usersService.RemoveLogin(login);
            usersService.RemoveUsersMessages(login);    
            System.Web.Security.FormsAuthentication.SignOut();
            return RedirectToActionPermanent("LogIn", "Users");
        }

но проблема не в этом методе.Когда я нажимаю на ссылку, я иду к стандартному стандартному каталогу / Home / Index.Не знаю, почему из кода клиента это работает, но с помощью ссылки для отправки обратной передачи на сервер нет.

1 Ответ

1 голос
/ 06 июля 2011

1. Пропустить первое определение маршрута

Поскольку он соответствует тому же маршруту, который был задан после него по умолчанию:

controller = Users
action = LogOut

Так что это было бы так же, если бы не было пользовательского Users/LogOut маршрута ...

2. Определите свой ActionLink правильно

Вам не нужно определять контроллер как вы (хотя он должен работать так же хорошо).

@Html.ActionLink("LogOut", "LogOut", "Users")

отлично справится.

3. Если это все еще не делает трюк

Затем укажите код (отредактируйте свой вопрос), который у вас есть:

public class UsersController
{
    function ActionResult LogOut()
    {
        // what's inside here?
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...