Представление «Индекс» или его мастер не найдены. В следующих местах были найдены - PullRequest
0 голосов
/ 18 марта 2020

Я получаю эту ошибку в приложении MVC:

Представление 'Index' или его мастер не найдены. Были найдены следующие местоположения:

~ / Views / User / Index.aspx

~ / Views / User / Index.ascx

~ / Views / Shared / Index. aspx

~ / Views / Shared / Index.ascx

Я не понимаю, почему это происходит; Я не пытаюсь перейти к представлению индекса; Я пытаюсь перейти к маршруту ChangeExpiredPassword. Код для действия контроллера ChangeExpiredPassword выполняется, но как только управление выходит из этого метода, эта ошибка выдается из внутренних элементов MVC. Я понятия не имею, почему мы внезапно пытаемся перенаправить на Index. Я не знаю, какой код будет уместным, но я могу добавить код по запросу. Спасибо!

edit: вот как мы добираемся до ChangeExpiredPassword, это из UserController класса:

[HttpPost]
public ActionResult Index(LogOnModel model, string returnUrl)
{
    ...
    if (pwExpirationDate < DateTime.Now)
    {
        return ChangeExpiredPassword();
    }
    ...
}

, а вот собственно ChangeExpiredPassword, минус некоторое HTML здание код:

[HttpGet]
public ActionResult ChangeExpiredPassword()
{
    ActionResult actionResult = null;

    try
    {
        ContentViewModel viewModel = new ContentViewModel();

        Form form = new Form();
        form.Method = FormMethod.Post;
        form.Action = "User/ChangeExpiredPassword";

        // this is where we build some HTML for the Change Expired Password view

        viewModel.ContentControls.Add(form);

        actionResult = View(viewModel);
    }
    catch (Exception ex)
    {
        HandleException(ex);
        actionResult = Error();
    }

    return actionResult;
}

1 Ответ

2 голосов
/ 18 марта 2020

Если ChangeExpiredPassword само по себе является действием, и если это действие заканчивается этим:

return View();

, то возвращая ChangeExpiredPassword() пытается вернуть представление. Однако , представление, выбранное платформой, основано на запрашиваемом маршруте, не вызываемый метод. С точки зрения фреймворка, вы возвращаете View() изнутри Index.

Похоже, вы хотите перенаправить пользователя на ChangeExpiredPassword. Что в вашем действии Index будет выглядеть примерно так:

return RedirectToAction(nameof(ChangeExpiredPassword));

Это даст указание браузеру инициировать новый запрос GET для действия ChangeExpiredPassword. Что семантически, это то, что вы хотите случиться. Там нет необходимости пытаться стать умным с возвращением очень пользовательских ответов. Держите каждый запрос / ответ простым и RESTful. Ответ от Index инструктирует клиента "вам нужно от go до ChangeExpiredPassword".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...