Проблема в том, что вы используете скрытое поле для хранения возвращаемого URL для перенаправления, которое будет отправлено как часть Request.Form
коллекции вместо отдельного параметра действия в методе действия контроллера POST.Чтобы убедиться, что возвращаемый URL включен во время отправки формы, я предлагаю вам сначала добавить свойство возвращаемого URL в viewmodel:
public class LoginModel
{
// other existing properties
public string ReturnUrl { get; set; }
}
Затем установить значение в действии GET, которое отображает форму входа:
[HttpGet]
public ActionResult Login(string returnUrl)
{
var model = new LoginModel() { ReturnUrl = returnUrl };
return View(model);
}
И вы можете предоставить скрытое поле внутри формы для хранения его значения:
@* using input hidden tag *@
<input name="ReturnUrl" value="@Model.ReturnUrl" type="hidden" />
@* using HTML helper *@
@Html.HiddenFor(model => model.ReturnUrl)
Наконец, возвращаемый URL-адрес может быть передан внутри экземпляра LoginModel
, нет необходимости указывать дополнительный параметр:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
//some codes
if (String.IsNullOrWhiteSpace(model.ReturnUrl))
{
return RedirectToAction("HomeIndex", "Home");
}
else
{
return Redirect(model.ReturnUrl);
}
}
else
{
ModelState.AddModelError("UserLoginError", "Username or password is incorrect");
}
return View(model);
}