2009-12-26 36 views
6

Tôi đang sử dụng chế độ xem một phần để đăng nhập và muốn chuyển hướng người dùng đến trang mới thành công và hiển thị lỗi xác thực trong chế độ xem một phần nếu mô hình không hợp lệ. Mục tiêu ajax đang được cập nhật và thành công hay thất bại. Nếu mô hình hợp lệ, nó sẽ hiển thị toàn bộ trang mới trong mục tiêu cập nhật nhưng tôi muốn nó chuyển hướng đến trang mới. Tôi đã thử chuyển hướng và RedirecttoAction nhưng nó không nhận được kết quả mong muốn. Bất kỳ ý tưởng về những gì tôi có thể đi để có được một bản cập nhật ajax để chuyển hướng đến một trang mới, không cập nhật các mục tiêu. Ngoài ra, hãy cho tôi biết nếu tôi đang sử dụng cách tiếp cận sai.Ajax Chuyển hướng đến Trang thay vì cập nhật mục tiêu

Partial View Code:

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


      <% } %> 

Đây là mã điều khiển liên quan:

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

Trả lời

8

Để thực hiện một chuyển hướng bạn cần phải làm điều đó trên các mặt hàng. Vì vậy, bạn không còn có thể sử dụng UpdateTargetId nhưng thay vào đó bạn nên sử dụng tùy chọn OnSuccess. Bạn cũng cần phải sửa đổi hành động điều khiển Logon để trong trường hợp chuyển hướng bạn kiểm tra nếu bạn là yêu cầu ajax và trong trường hợp này trả lại đối tượng Json với url chuyển hướng sẽ được sử dụng trong javascript:

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

Và trong chế độ xem:

<% 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> 
Các vấn đề liên quan