2009-12-26 13 views
6

Oturum açma için kısmi bir görünüm kullanıyorum ve kullanıcıyı başarı ile ilgili yeni bir sayfaya yönlendirmek ve model geçersizse kısmi görünümde doğrulama hatalarını göstermek istiyorum. Ajax hedefi güncelleniyor ve başarı veya başarısızlık oluyor. Model geçerliyse, yeni sayfanın tamamını güncelleme hedefinde gösteriyor ancak yeni sayfaya yönlendirilmesini istiyorum. Redirect ve RedirecttoAction'ı denedim, ancak arzu sonuçlarını almıyor. Gitmek için neler yapabileceğine dair herhangi bir fikir, yeni bir sayfaya yönlendirmek, hedefi güncellemek için bir ajax güncellemesi alır. Ayrıca, yanlış yaklaşımı kullanırsam bana bildirin.Ajax Hedefi Güncellemek yerine Sayfaya Yönlendir

Kısmi Görünüm Kodu:

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); 
     } 

cevap

8

istemci tarafında bunu yapmak için gereken bir yönlendirme gerçekleştirmek için: Burada

<% 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" /> 


      <% } %> 

ilgili denetleyici kodudur. Yani artık UpdateTargetId'u kullanamazsınız, bunun yerine OnSuccess seçeneğini kullanmalısınız. Ayrıca bir yönlendirme durumunda size bir ajax isteği olup olmadığını test böylece Logon kontrolör eylemi değiştirmeniz gerekir ve bu durumda javascript kullanılacak yönlendirme URL'sini içeren bir Json nesnesi döndürür:

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

Ve görünümde:

<% 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>