Javascript 跨多个控制器持久化数据

Javascript 跨多个控制器持久化数据,javascript,asp.net-mvc-4,controller,persist,Javascript,Asp.net Mvc 4,Controller,Persist,我有一个登录表单(用Html.BeginForm()创建),其中有一个电子邮件字段、密码字段和一个“忘记密码”链接。最初,它是登录表单中的一个提交按钮,它将拦截SignIn操作。我想从登录操作中提取忘记密码功能 在这样做时,我注意到它是这样设置的,以便将电子邮件字段值传递到忘记密码页面(这样用户就不必重新输入)。已将其放入TempData中 我的想法是对新的控制器操作进行AJAX调用: [HttpPost] [AllowAnonymous] public ActionRe

我有一个登录表单(用
Html.BeginForm()
创建),其中有一个电子邮件字段、密码字段和一个“忘记密码”链接。最初,它是登录表单中的一个提交按钮,它将拦截
SignIn
操作。我想从登录操作中提取忘记密码功能

在这样做时,我注意到它是这样设置的,以便将电子邮件字段值传递到忘记密码页面(这样用户就不必重新输入)。已将其放入
TempData

我的想法是对新的控制器操作进行AJAX调用:

    [HttpPost]
    [AllowAnonymous]
    public ActionResult ToForgotMyPassword(string email)
    {
        TempData["signInEmail"] = email;

        return Json(new { redirectUrl = Url.Action("ForgotMyPassword"), TempData = TempData, email = email });
    }
但是我发现我的问题是
TempData
不会持续到下一个操作,
ForgotMyPassword
。在我看来,我有以下几点:

$('#forgotPassword').click(function (e) {
    var forgotMyPasswordUrl = $(this).attr('href');
    e.preventDefault();

    $.ajax({
        type: "POST",
        url: '@Url.Action("ToForgotMyPassword")',
        data: { email: $('#Email').val() },
        dataType: "json",
        beforeSend: function (xhr) {
            console.log(xhr);
        },
        success: function (result) {
            //alert('Success');
            console.log(result);
            window.location = result.redirectUrl;
        },
        error: function (result) {
            alert('Error');
            console.log(result);
            //window.location = forgotMyPasswordUrl;
        }
    });
});

我如何将这个临时数据持久化到重定向页面?我这样做不适合AJAX调用吗?我应该在登录表单中创建一个新模型和新表单吗?

我试图重复您的问题。下面是我所做的:

控制器:

 [HttpPost]
 [AllowAnonymous]
 public ActionResult ToForgotMyPassword(string email)
 {
     TempData["signInEmail"] = email;

     return Json(new { redirectUrl = Url.Action("ForgotMyPassword")});
 }

 [HttpGet]
 [AllowAnonymous]
 public ActionResult ForgotMyPassword()
 {
     var email = TempData["signInEmail"];

     return View("Index", email);
 }
视图:

TempData将被清除,它的集合中没有任何元素 2) 如果您输入id=“email”并在脚本中使用$(“#email”).val()-您将一无所获。名字应该是相等的


希望有帮助。

谢谢你的努力。在我的应用程序中,
TempData[“email”]
在重定向页面上不可用。我已经检查了TempData和Jquery,它们都得到了正确的值。就在我被重定向到下一页(我传递回Jquery的新控制器)时,
TempData[“email”]
不存在。除非我遗漏了什么,否则我认为问题是关于我最初问题的解决方案。如问题所述,我不确定我的解决方案是否是解决问题的最佳方式。
@model string
<html>
<head>
    <title>@Model</title>
</head>
 <body>
    <div>
        <input id="email" value="test@test.com"/>
        <button id="forgotPassword">forgotPassword</button>
    </div>
 </body>
</html>

<script>
  $('#forgotPassword').click(function (e) {

    e.preventDefault();

    $.ajax({
        type: "POST",
        url: '@Url.Action("ToForgotMyPassword")',
        data: { email: $('#email').val() },
        dataType: "json",
        beforeSend: function (xhr) {
            console.log(xhr);
        },
        success: function (result) {
            console.log(result);
            window.location = result.redirectUrl;
        },
        error: function (result) {
            alert('Error');
            console.log(result);
        }
    });
  });
</script>
Json(new { redirectUrl = Url.Action("ForgotMyPassword"), TempData = TempData, email = email });