У меня есть два частичных вида на родительской странице. Проблема заключается в том, когда я вызываю перенаправление на локальный, как только форма успешно отправлена, следующая страница загружается вместо частичного представления внутри родителя. Другая форма также видима. Вот методы действий и логика представления, связанные с одним из них, поскольку они почти идентичны. Как это исправить?Перенаправление после обработки частичного представления с помощью ajax приводит к загрузке следующей страницы внутри div частичного представления.
[AllowAnonymous]
public ActionResult _LoginPartial(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView(new LoginModel());
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult _LoginPartial(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return PartialView(model);
}
Часть родительской страницы, что делает парциальное
@{
if(!WebSecurity.IsAuthenticated){
<h2>Use a Creative Works account to log in.</h2>
@Html.Action("_LoginPartial", new {returnUrl = ViewBag.ReturnUrl })
}
}
частичного вида
@using (Ajax.BeginForm("_LoginPartial", new {returnUrl = ViewBag.ReturnUrl},
new AjaxOptions(){UpdateTargetId = "loginForm",
InsertionMode = InsertionMode.Replace
})) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Log in Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</li>
<li>
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe, new { @class = "checkbox" })
</li>
</ol>
<input type="submit" value="Log in" />
</fieldset>
}
Поскольку вы используете 'AjaxOptions()', вы можете дать функцию js для события OnComplete. Разве это не работает? Подобно 'new AjaxOptions() {UpdateTargetId =" loginForm ", InsertionMode = InsertionMode.Replace, OnComplete =" Redirect() " }' – Nilesh