Как пропустить имя контроллера при использовании RedirectToAction?

У меня есть класс accountController, и у него есть вход в систему и домашние представления.

    [HandleError]
    public class accountController : Controller
    {
        [HttpPost]
        public ActionResult login(LoginModal model, string returnUrl)
        {
             //Authentication
             return RedirectToAction("home"); 
        }
        public ActionResult home()
        {
             return View(); 
        }
    } 
------------------------------
-----------------------------
Global.asax have Route entry.. so my urls is 
http://lmenaria.com/login
http://lmenaria.com/home

routes.MapRoute(null, "home", new { controller = "account", action = "home" });
routes.MapRoute(null, "login", new { controller = "account", action = "login" });

Когда я попробовал оба URL-адреса в браузере, они работали нормально. Но при успешном входе в систему перейдите на http://lmenaria.com/account/home Итак, как я могу удалить "аккаунт" с этого URL. это происходит, когда я использовал return RedirectToAction ("home"); и получаю ошибку 404.

Пожалуйста, дайте мне знать, как я могу решить эту проблему. Мне не нужно имя контроллера в URL-адресе.

Спасибо Laxmilal Menaria


person Laxmi Lal Menaria    schedule 29.04.2011    source источник


Ответы (4)


routes.MapRoute ("дом", "дом", новый {контроллер = "аккаунт", действие = "дом"});

Я пробовал использовать Above MapRoute и использовать RedirectToRoute вместо RedirectTOAction и его работу.

Спасибо.

person Laxmi Lal Menaria    schedule 10.05.2011

Если вы хотите, чтобы контроллер по умолчанию был «account», не отображая его в своем URL-адресе, вы можете сделать что-то вроде

routes.MapRoute (null, "{действие}", новый {контроллер = "аккаунт"});

если хотите, вы также можете использовать значение по умолчанию для действия

routes.MapRoute (null, "{действие}", новый {контроллер = "аккаунт", действие = "дом"});


Я редактирую свой ответ, чтобы вы знали, что вам не нужно явно определять каждый маршрут, как вы это делаете. Маршруты MVC соответствуют шаблонам. Итак, вместо

routes.MapRoute(null, "home", new { controller = "account", action = "home" }); routes.MapRoute(null, "login", new { controller = "account", action = "login" });

использовать просто

routes.MapRoute(null, "{action}", new { controller = "account" });

И обратите внимание на порядок маршрутов, если вы определяете более одного шаблона, потому что порядок имеет значение. MVC будет использовать первый шаблон, соответствующий вашему URL.

person peflorencio    schedule 29.04.2011

Я думаю, что настоящая проблема в том, что вы либо не создавали, либо удаляли домашний контроллер.

Из вашего описания действительно кажется, что вы должны вызывать RedirectToAction для действия индекса домашнего контроллера.

person Chris Marisic    schedule 29.04.2011

у вас есть [HttpPost] в вашем действии входа в систему. Что должно быть проблемой. Я просто запускаю ваши коды без атрибута [HttpPost]. это работает. когда вы набираете http://lmenaria.com/login, ваше действие «входа в систему» ​​не запускается из-за атрибут. Итак, должны быть какие-то другие маршруты, которые выполняют маршрутизацию.

person fengd    schedule 29.04.2011