Witam,
jestem świeży w asp.net mvc i napotkałem pewnie dość prosty do rozwiązania problem, aczkolwiek sam tego nie widzę.
Mam 2 kontrolery: home i login. W skrócie w kontrolerze login posiadam przeładowaną action metodę Index (taka też znajduje się w home) z atrybutem POST, która zajmuje się operacjami związanymi z uwierzytelnianiem. Chcę pozyskać wpisany przez użytkownika login (no to akurat jest), a potem przekazać go do widoku w celu podmiany.
Tu się pojawia problem, ponieważ nie mam pojęcia jak przekazywać wynik działania jednej metody typu POST z jednego kontrolera do drugiej, znajdującej się w innym kontrolerze, która ma to wyrzucić do widoku.
Kod wygląda w skrócie tak:
HomeController
public ActionResult Index(string VUsername)
{
bool IsAuthed = System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
if (IsAuthed == true)
{
ViewBag.VU = VUsername;
return View();
}
//......inne operacje
}
LoginController
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public virtual ActionResult Index(LoginViewModel model)
{
//......inne wccześniejsze operacje
var authenticationResult = authService.SignIn(model.Username, model.Password);
if (authenticationResult.IsSuccess)
{
ViewUsername = model.Username;
return RedirectToAction("Index", "Home", new { VUsername = ViewUsername }); //TUTAJ
}
}
Próbowałem przekierowania RedirectToAction, ale niestetu w takiej formie nie działa.
Debuggowanie kodu pokazało, że w LoginControllerze zmienna
ViewUsername
jest normalnie wypełniana, natomiast w HomeControllerze zmienna ViewBag.VU
jest pusta nawet po poprawnym zalogowaniu.