MVC Макет не очищается, содержимое перенаправления загружается внутри оригинального макета - PullRequest
0 голосов
/ 07 февраля 2020

ОБНОВЛЕНИЕ: Я удалил все вызовы asyn c и сделал его полностью синхронным, и я все еще испытываю эту проблему, поэтому это не проблема с asyn c.

Итак, у меня есть LoginLayout в моих макетах. Это не основной файл макета. Когда пользователь входит в систему, мы определяем некоторые условные значения в базе данных, а затем перенаправляем их соответственно на промежуточную страницу или непосредственно на нашу панель мониторинга.

Если наш пользователь сначала перенаправляется на промежуточную страницу, и в этом случае они нажмите кнопку отправки, которая отправляет сообщение в действие, и все работает как положено. Но если мы не загружаем промежуточную страницу и вместо этого перенаправляем на другое действие, которое вызывает ту же функцию входа в систему. Они должны go прямо к приборной панели, иначе не возвращать представление, вместо этого возвращать RedirectToAction, эта же функция нарушает макет приборной панели.

Я действительно вижу, MVC рендерит основной файл _layout ВНУТРИ метода LoginLayout files @RenderBody(). и URL-адрес не меняется на / Dashboard, что также странно.

Стоит также отметить, что я попытался RedirectToAction, RedirectToRoute, Перенаправить все делать то же самое. Кроме того, когда загруженная искаженная страница загружается, если я вручную перехожу к / Dashboard, она корректно отображает.

Вот код

//In my Login controller PostLogin method
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogonPost(LoginModel model)
{
    //validate login and if all good then
    return RedirectToAction("Index", "Intermediary");
}


 //Intermediary Controller this one does not work if called page is loaded wierd as described
 public async Task<ActionResult> Index()
 {                
     await Task.Run(() =>
     {
         //grab database stuff in here set session vars etc

     });

     return await PostLogonConnecting();                    
  }

Этот вызывается как сообщение со страницы, когда они нажимают на кнопка и работает нормально

public async Task<ActionResult> PostCompany(CompaniesListModel model)
{
     //do db stuff 
    return await PostLogonConnecting();    
}

Этот PostLogonConnecting находится в моем базовом классе, поэтому его можно вызывать из нескольких контроллеров.

public async Task<RedirectToActionResult> PostLogonConnecting()
{                
    await Task.Run(() =>
    {
        //do db stuff in here
    });    

    return RedirectToAction("Index", "Dashboard"); 
}

1 Ответ

0 голосов
/ 08 февраля 2020

поэтому я узнал, что это связано с AjaxHelper. (Не добавлено мной), поэтому я не был уверен, как это работает. Некоторое гугление об этом привело меня к этому ответу. Это было трудно понять, но, по крайней мере, это решено!

Как получить ответ ASP. NET MVC Ajax для перенаправления на новую страницу вместо вставки представления в UpdateTargetId

...