Вы должны вернуть returnUrl вместе с формой поста.
Вероятно, самое чистое решение - добавить returnUrl в качестве свойства в LogOnViewModel:
public class LogOnViewModel
{
public string UserName { get; set; }
public string Password { get; set; }
public string ReturnUrl { get; set; }
}
Ваш метод get установит это значение:
[HttpGet]
public ActionResult LogOn(string returnUrl)
{
// code for already authenticated case left out for demo
var model = new LogOnViewModel { ReturnUrl = returnUrl };
return View(model);
}
}
В вашей форме вы сохраните это значение как скрытое поле:
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.ReturnUrl)
// rest of form code left out for demo purposes
}
Ваш метод записи будет иметь доступ к этому значению:
[HttpPost]
public ActionResult LogOn(LogOnViewModel model)
{
if (ModelState.IsValid)
{
if (....)
{ string returnUrl = model.ReturnUrl;
//..............
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
return Redirect(returnUrl);
return RedirectToAction(string.Empty, "home");
}
else
{
//..............
}
}
return View(model);
}