Как пропустить имя контроллера при использовании RedirectToAction? - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть класс 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

Ответы [ 4 ]

1 голос
/ 10 мая 2011

rout.MapRoute ("home", "home", new {controller = "account", action = "home"});

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

Спасибо.

0 голосов
/ 29 апреля 2011

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

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

0 голосов
/ 29 апреля 2011

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

0 голосов
/ 29 апреля 2011

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

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

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

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


Я редактирую свой ответ, чтобы вы знали, что вам не нужно явно определять каждый маршрут, как вы делаете. Маршруты 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.

...