Asp.net mvc 使用ajax处理部分视图后重定向会导致在部分视图内加载下一页';s分区。

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;

我在父页面中有两个部分视图。问题是,当我调用redirect to local时,一旦表单成功提交,下一个页面将被加载到父视图中的部分视图位置。另一种形式也是可视的。下面是与其中一个关联的操作方法和视图逻辑,因为它们几乎相同。我该如何解决这个问题

[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()”}