2017-01-03 3 views
0

После внедрения this useful response и перемещения моего Login вид на папку с изображениями Shared, она не инициализируется, когда я вызываю ее с другого контроллера.Как правильно инициализировать общий вид?

Мой код вызова:

[HttpGet] 
public IActionResult AddressCorrectionList() 
{ 
    if (ValidateSecurityToken()) // ensures the app server thinks we're still logged in 
    { 
     [deleted for clarity] 
     return View(model); 
    } 
    else 
    { 
     return View("Login", new LoginViewModel { ReturnUrl = "/Report/AddressCorrectionList" }); 
    } 
} 

Действие в AccountController называют:

[ActionName("Login"), HttpGet] 
[AllowAnonymous] 
public IActionResult LoginGet(LoginViewModel model) 
{ 
    ViewData["ReturnUrl"] = model.ReturnUrl; // I set a breakpoint here. 

    if (model.ReturnUrl != null) 
    { 
     model.InfoMessage = "Please login to access " + ResourceNameFor(model.ReturnUrl); 
    } 

    ModelState.Clear(); 
    return View(model); 
} 

Если я непосредственно по ссылке на страницу входа, она отлично работает. Вызывается моя точка останова в LoginGet.

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

Проблема возникает, когда я вызываю View с другого контроллера, например, из первого из двух фрагментов кода. Отображается страница входа в систему, однако моя точка останова от LoginGet не вызывается, а мой ReturnUrl не установлен.

ValidateSecurityToken существует, потому что, хотя приложение может рассмотреть возможность входа пользователя в систему, отдельный сервер приложений, на который я запускаю вызовы API, может вывести пользователя из-за его собственных правил тайм-аута.

Как исправить мой звонок от AddressCorrectionList, так что мое представление правильно инициализировано?

+0

Возможно, какая-то ясность поможет. Так вы называете общее представление входа в виде частичного представления из родительского представления? Если нет, как вы его визуализируете? –

+0

Это не частичный вид. Это просто «нормальное» представление '.cshtml', которое раньше использовалось в каталоге« Представления/учетная запись »и отображается, предположительно, в вызове« RenderBody() »в' _Layout.cshtml'. (Methinks Мне не хватает сути того, что вы пытаетесь спросить меня.) –

ответ

2

При вызове return View("viewName", model) файл cshtml непосредственно отображается с данной моделью. Действие LoginGet никогда не попадает, поскольку вы вызываете метод, чтобы вернуть вид.

Что вы ищете, это выполнить метод RedirectToAction("LoginGet") или любую его перегрузку.

+0

Вы положили меня на правильный путь, и [этот ответ] (http://stackoverflow.com/a/10785274/35142) завершил картина. Для моего случая правильное использование было «RedirectToAction» («Вход», «Учетная запись», модель); –

Смежные вопросы