Asp.net mvc 使用ajax处理部分视图后重定向会导致在部分视图内加载下一页';s分区。
我在父页面中有两个部分视图。问题是,当我调用redirect to local时,一旦表单成功提交,下一个页面将被加载到父视图中的部分视图位置。另一种形式也是可视的。下面是与其中一个关联的操作方法和视图逻辑,因为它们几乎相同。我该如何解决这个问题Asp.net mvc 使用ajax处理部分视图后重定向会导致在部分视图内加载下一页';s分区。,asp.net-mvc,asp.net-mvc-4,asp.net-ajax,Asp.net Mvc,Asp.net Mvc 4,Asp.net Ajax,我在父页面中有两个部分视图。问题是,当我调用redirect to local时,一旦表单成功提交,下一个页面将被加载到父视图中的部分视图位置。另一种形式也是可视的。下面是与其中一个关联的操作方法和视图逻辑,因为它们几乎相同。我该如何解决这个问题 [AllowAnonymous] public ActionResult _LoginPartial(string returnUrl) { ViewBag.ReturnUrl = returnUrl;
[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 })
}
@{
如果(!WebSecurity.IsAuthenticated){
使用Creative Works帐户登录。
@Action(“_LoginPartial”,新的{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>
}
@使用(Ajax.BeginForm(_LoginPartial),new{returnUrl=ViewBag.returnUrl},
新的AjaxOptions(){UpdateTargetId=“loginForm”,
InsertionMode=InsertionMode.Replace
})) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
登录表格
@LabelFor(m=>m.UserName)
@Html.TextBoxFor(m=>m.UserName)
@Html.ValidationMessageFor(m=>m.UserName)
@LabelFor(m=>m.Password)
@Html.PasswordFor(m=>m.Password)
@Html.ValidationMessageFor(m=>m.Password)
@CheckBoxFor(m=>m.RememberMe)
@LabelFor(m=>m.RememberMe,新的{@class=“checkbox”})
}
将ajax表单ajax.BeginForm
更改为常规表单Html.BeginForm
,以便由浏览器而不是ajax回调处理响应。或者,如果成功,您可以在ajax回调上手动重定向浏览器。当您使用AjaxOptions()
时,您可以为OnComplete
事件提供js函数。那不管用吗?像new AjaxOptions(){UpdateTargetId=“loginForm”,InsertionMode=InsertionMode.Replace,OnComplete=“Redirect()”}