2013-08-30 2 views
0

У меня есть два частичных вида на родительской странице. Проблема заключается в том, когда я вызываю перенаправление на локальный, как только форма успешно отправлена, следующая страница загружается вместо частичного представления внутри родителя. Другая форма также видима. Вот методы действий и логика представления, связанные с одним из них, поскольку они почти идентичны. Как это исправить?Перенаправление после обработки частичного представления с помощью 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> 

    } 
+0

Поскольку вы используете 'AjaxOptions()', вы можете дать функцию js для события OnComplete. Разве это не работает? Подобно 'new AjaxOptions() {UpdateTargetId =" loginForm ", InsertionMode = InsertionMode.Replace, OnComplete =" Redirect() " }' – Nilesh

ответ

0

изменить форму АЯКС Ajax.BeginForm к обычной форме Html.BeginForm так что ответ обрабатывается браузером i вместо обратного вызова ajax. В качестве альтернативы вы можете вручную перенаправить браузер на обратный вызов ajax, если он будет успешным.

+0

Я попробую это, когда буду работать завтра! – Fitzpleasure

Смежные вопросы