代码之家  ›  专栏  ›  技术社区  ›  scottrakes

Ajax重定向到页面而不是更新目标

  •  6
  • scottrakes  · 技术社区  · 15 年前

    我正在使用部分视图登录,希望在成功时将用户重定向到新页面,并在部分视图中显示验证错误(如果模型无效)。Ajax目标正在更新,成功或失败。如果模型有效,它将在更新目标中显示整个新页面,但我希望它重定向到新页面。我尝试过重定向和重定向到操作,但是没有得到想要的结果。任何关于我能去做什么的想法都可以得到一个Ajax更新来重定向到一个新页面,而不是更新目标。另外,如果我使用了错误的方法,请告诉我。

    部分视图代码:

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

    以下是相关的控制器代码:

      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);
            }
    
    1 回复  |  直到 11 年前
        1
  •  8
  •   Darin Dimitrov    15 年前

    要执行重定向,您需要在客户端执行。所以你不能再使用 UpdateTargetId 但是你应该用 OnSuccess 选择权。您还需要修改 Logon 控制器操作,以便在重定向的情况下测试它是否是Ajax请求,在这种情况下返回带有重定向URL的JSON对象,该URL将在javascript中使用:

    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>