【问题标题】:Ajax Redirect to Page instead of Updating TargetAjax 重定向到页面而不是更新目标
【发布时间】:2010-12-30 03:30:29
【问题描述】:

我正在使用部分视图进行登录,并希望在成功时将用户重定向到新页面,并在模型无效时在部分视图中显示验证错误。 ajax 目标正在更新,成功或失败。如果模型有效,它会在更新目标中显示整个新页面,但我希望它重定向到新页面。我已经尝试过 Redirect 和 RedirecttoAction 但它没有得到想要的结果。关于我可以做什么的任何想法都可以获取 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);
        }

【问题讨论】:

    标签: asp.net-mvc asp.net-ajax asp.net-mvc-partialview


    【解决方案1】:

    要执行重定向,您需要在客户端执行此操作。因此,您不能再使用UpdateTargetId,而是应该使用OnSuccess 选项。您还需要修改 Logon 控制器操作,以便在重定向的情况下测试您是否是 ajax 请求,并在这种情况下返回带有重定向 url 的 Json 对象,该对象将在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2012-07-07
      • 2011-11-19
      • 2018-12-10
      相关资源
      最近更新 更多