Проблема маршрутизации: перенаправление на неверный вид

Mahadevan Swamy спросил: 12 мая 2018 в 03:57 в: asp.net-mvc

У меня есть простое приложение (http://myurl.com), и когда я печатаю URL-адрес в адресной строке, я получаю маршрут http://myurl.com/RBA/Login.

    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    if (ModelState.IsValid)
    {
        try
        {
            if (!loginSuccessful)
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return RedirectToAction("Index", "Login");
            }
            else 
            {
                return RedirectToAction("Index", "MyTickets");
            }
        }
        catch (Exception ex)
        {
            log.Error(ex);
            ViewBag.Message = "An error occurred";
            throw;
        }
    }    return View(model);
}

Однако после входа в приложение и при вводе http://myurl.com я получаю страницу с сообщением об ошибке со следующим сообщением:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/MyTickets/Index.cshtml
~/Views/MyTickets/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

Я поставил точку останова на действие индекса в MyTicketsController, и мне удалось ударить точку останова, но получив то же сообщение об ошибке. Чтобы устранить эту проблему, я скопировал папку MyTickets в разделе "Виды в области RBA" и вставил ее в общую папку "Views", и она сработала.

Мой вопрос: почему я направляюсь к неправильному представлению? Я знаю, что это имеет какое-то отношение к маршрутизации, и я был бы признателен за понимание этой проблемы. Спасибо

Это мои маршруты:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "RBA_default",
        "RBA/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

1 ответ

Mark F ответил: 22 мая 2018 в 03:16

Ошибка говорит о том, что MyTickets/Index.cshtml не существует в корневой папке. Если ваш контроллер MyTickets находится в области, вам нужно указать область при перенаправлении.

Попробуйте добавить имя области при вызове метода перенаправления.

return RedirectToAction("Index", "MyTickets", new { area = "YourArea" });