2009-12-26 5 views
6

로그인 할 때 부분 뷰를 사용하고 있는데 성공하면 새 페이지로 사용자를 리디렉션하고 모델이 유효하지 않은 경우 유효성 검사 오류를 부분 뷰에 표시하려고합니다. 아약스 대상이 업데이트되고 성공 또는 실패합니다. 모델이 유효하면 업데이트 대상에 새 페이지가 모두 표시되지만 새 페이지로 리디렉션하려고합니다. Redirect and RedirecttoAction을 시도했지만 원하는 결과를 얻지 못했습니다. 내가 갈 수있는 것에 대한 아이디어는 목표를 업데이트하지 않고 새 페이지로 리디렉션하도록 ajax 업데이트를 얻습니다. 또한 잘못된 접근법을 사용하고 있는지 알려주십시오.Ajax 대상을 업데이트하는 대신 페이지로 리디렉션

부분보기 코드 :

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

답변

8

당신이 클라이언트 측에서 그것을 할 필요가 리디렉션을 수행하려면 : 여기

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


      <% } %> 

는 관련 컨트롤러 코드입니다. 따라서 더 이상 UpdateTargetId을 사용할 수 없지만 대신 OnSuccess 옵션을 사용해야합니다. 또한 리디렉션의 경우에 당신은 당신이 아약스의 요청이있는 경우 테스트하도록 Logon 컨트롤러 액션을 수정해야하고,이 경우 자바 스크립트에 사용되는 리디렉션 URL로 JSON 개체를 반환합니다

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

보기에서 :

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