跨多个控制器持久化数据
Persist data across multiple controllers
我有一个登录表单(用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
。在我看来,我有以下JS:
$('#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;
}
});
});
如何将此TempData持久化到重定向页面?我这样做是不是不适合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);
}
视图:
@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>
所有这些东西都很有效,所以我检查了两种理论:1( 如果您尝试发送TempData(下一个代码片段中的"TempData=TempData"(
Json(new { redirectUrl = Url.Action("ForgotMyPassword"), TempData = TempData, email = email });
TempData将被清除,它的集合中没有任何元素2( 如果您输入id="email",并且在脚本中使用$("#email"(.val((,您将一无所获。名称应等于
我希望它能有所帮助。
相关文章:
- 在post-expressjs之后持久化表单数据
- 如何使 Angular 服务中的数据通过页面刷新持久化
- 使用DOM中的信息创建一个控制器/服务来持久化数据
- 使用 JavaScript 将数据持久化在服务器上
- 如何在 react.js 中跨子组件持久化数据或状态
- 如何在javaScript:Jquery中保存/持久化和访问客户端的数据
- Ember Mirage 持久化数据
- 如何在angularjs中持久化表单字段数据
- 在AngularJS应用程序中本地持久化数组数据,以便在两个应用程序之间共享
- 我可以在浏览器之间通过Javascript持久化应用程序数据吗
- 在我的服务工厂中,我查找了一个大型数据集——我想持久化它,并检查它的存在,以避免再次调用它
- 如何在猫鼬获取后持久化数据
- 如何在angular JS中持久化数据和模型
- 如何使用Angular更新Kendo-UI网格上的数据并持久化层级选择?
- Google apps脚本:如何在不同的函数调用之间在电子表格中持久化数据
- 在knockoutJS中为observableArray在客户端持久化数据
- 跨多个控制器持久化数据
- 如何在卸载应用程序后在数据库中持久化数据
- 使用智能表在视图状态 AngularJs 之间持久化数据
- 在重新声明的变量中持久化数据