2009-12-26 18 views
6

Używam częściowego widoku do logowania i chcę przekierować użytkownika na nową stronę po pomyślnym zakończeniu i pokazać błędy sprawdzania poprawności w częściowym widoku, jeśli model jest nieprawidłowy. Cel ajax jest aktualizowany i sukces lub porażka. Jeśli model jest prawidłowy, pokazuje całą nową stronę w celu aktualizacji, ale chcę ją przekierować na nową stronę. Próbowałem przekierowania i przekierowania, ale nie uzyskałem pożądanych rezultatów. Wszelkie pomysły na to, co mogę zrobić, otrzymuję aktualizację ajaxową, aby przekierować na nową stronę, a nie aktualizować celu. Ponadto, daj mi znać, jeśli używam niewłaściwego podejścia.Przekierowanie Ajax do strony zamiast Aktualizowanie celu

Częściowy widok Kod:

<% using (Ajax.BeginForm(
     "LogOn", 
     null, 
     new AjaxOptions { 
      HttpMethod = "POST", 
      UpdateTargetId = "SignInForm" 
     }, 
     new { 
      id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"] 
     })) { %> 

        <<Page HTML Controls>> 

        <input type="submit" value="Log On" /> 


      <% } %> 

Oto odpowiedni kod kontrolera:

public ActionResult Logon(LogOnModel model,string returnUrl) 
     { 
      if (ModelState.IsValid) 
      { 
      //Login Logic Code   
      if (!String.IsNullOrEmpty(returnUrl)) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 
         return RedirectToAction("Index", "App"); 
        } 

      } 

      // If we got this far, something failed, redisplay form 
      if (Request.IsAjaxRequest()) 
          return PartialView("LogOnControl"); 

      return View(model); 
     } 

Odpowiedz

8

Aby wykonać przekierowanie trzeba to zrobić po stronie klienta. Więc nie możesz już używać UpdateTargetId, ale powinieneś zamiast tego użyć opcji OnSuccess. Potrzebny będzie również modyfikować działanie Logon kontrolera tak, że w przypadku przekierowania przetestować jeśli jest to żądanie ajax iw tym przypadku zwrócić obiekt JSON z przekierowanie, które zostaną wykorzystane w javascript:

if (ModelState.IsValid) 
{ 
    if (string.IsNullOrEmpty(returnUrl)) 
    { 
     returnUrl = Url.Action("Index", "App"); 
    } 
    if (Request.IsAjaxRequest()) 
    { 
     return Json(new { returnUrl = returnUrl }); 
    } 
    return Redirect(returnUrl); 
} 

A w widoku:

<% using (Ajax.BeginForm(
    "LogOn", 
    null, 
    new AjaxOptions { 
     HttpMethod = "POST", 
     OnSuccess = "success" 
    }, 
    new { 
     id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"] 
    })) { %> 
     <<Page HTML Controls>> 
     <input type="submit" value="Log On" /> 
<% } %> 

<script type="text/javascript"> 
function success(context) { 
    var returnUrl = context.get_data().returnUrl; 
    if (returnUrl) { 
     window.location.href = returnUrl; 
    } else { 
     // TODO: update the target form element with the returned partial html 
    } 
} 
</script> 
Powiązane problemy