【问题标题】:The Return URL from AJAX.BeginForm in mvcmvc 中 AJAX.BeginForm 的返回 URL
【发布时间】:2016-09-17 13:45:04
【问题描述】:

我打开登录表单作为弹出窗口,并将 Ajax.beginform 放入登录过程中,如下所示。

@using (Ajax.BeginForm("Login", "Home", null, new AjaxOptions { OnSuccess = "OnSuccess", HttpMethod = "POST" },
    new { id = "Logonform", returnUrl = ViewBag.ReturnUrl }))
{
    ....
}

现在,当我登录时,我必须重定向到当前页面,无论是“家或关于我们”之类的内容。就像如果我从关于我们页面打开弹出窗口,那么它会重定向到关于我们页面。

我的控制器如下:

[HttpPost]
public ActionResult Login(LoginModel LM, string returnUrl)
{
    if (ModelState.IsValid)
    {
        FormsAuthentication.SetAuthCookie(LM.UserName, false);
        if (!string.IsNullOrEmpty(returnUrl))
            return Json(new { returnUrl = returnUrl });
        return RedirectToAction("Index", "Home");
    }
    else
    {
        ModelState.AddModelError("UnSucessful", "User Name or Password is incorrect.");
    }
    return View(LM);
}

但是每次我没有得到返回 URL 并且它进入“主页”页面。

所以请告诉我如何处理它。

【问题讨论】:

  • 你使用 ajax。 Ajax 永远不会重定向到另一个页面。
  • 那么它将如何根据我的方案进行管理。
  • ajax 的全部意义在于保持在同一页面上。如果你想重定向,那么只需使用普通的@Html.BeginForm()
  • 您的代码(控制器)在某处缺少{

标签: c# asp.net ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

您可以从您的操作中读取returnUrl 并将其重定向到javascript:

在 javascript 中将类似的内容添加到您的成功处理程序中:

Javascript(在您的成功处理程序中)

success: function (result) {
            if (result.success == true)
            {
               window.location = result.returnUrl;
            }
        }

作为旁注,我还将更改 Login 方法的其余部分以返回 json,而不是向模型状态添加错误并返回视图。

更新

您的 onSuccess 方法看起来像这样:

function OnSuccess(result) {
    if (result.success == true)
    {
        window.location = result.returnUrl;
    }
}

【讨论】:

  • 你能给我举个例子吗
  • 好的,但是如何设置returnUrl。它是从控制器手动设置的吗?我希望 returnUrl 是动态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多