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