我需要将数据从一个控制器动作传递给另一个。 我不想用将数据从一个控制器动作传递到另一个控制器动作在ASP.Net MVC 5
a。 Session
b。 TempData的
逻辑
下面代码是关于forget password
。用户键入他的电子邮件密码重置,然后重定向到另一个视图,他可以通过电子邮件接收令牌。现在我想从第一个视图发送emailID作为隐藏字段(或WHATEVER),这样我可以发送令牌以及电子邮件ID(隐藏),以便在发布第二个视图时进行验证。 下面好吧是我曾尝试
FirstMV.cs
public class FirstMV
{
public string Email { get; set; }
}
SecondMV.cs
public class SecondMV
{
public string Token { get; set; }
public string Email { get; set; }
}
FirstView.cshtml
@model FirstMV
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Email)
SecondView.cshtml
@model SecondMV
@Html.LabelFor(m => m.Token)
@Html.TextBoxFor(m => m.Token, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Token)
// HERE I WANT TO PUT ONE HIDDEN FIELD MAY BE FOR EMAIL ID
控制器:
[HttpGet]
public ActionResult FirstView()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ForgotPassword(FirstMV viewModel)
{
// Some code
return RedirectToAction("SecondView", new SecondMV { Email = viewModel.Email });
}
[HttpGet]
public ActionResult SecondView(SecondMV viewModel)
{
return View();
}
[HttpPost]
public ActionResult SecondView(SecondMV viewModel)
{
// Some Code
return View();
}
为SecondView被定义了两次,我得到错误。
问题1:是我实现上述功能的唯一方法是TempData and Session
。我是初学者,所以请指导我。如果最佳做法是在我的方案中使用Tempdata and Session
,请告诉我。我会遵循这一点。
问题2:我们可以帮助“传递匿名对象”到另一个控制器动作。
以前从未真正看到过使用[HTTPGet]。尝试使用ViewBags将数据从视图传递到控制器。对于隐藏信息,请尝试@ Html.HiddenFor(x => x.EmailId)尝试返回RedirectToAction(“SecondView”,new {EmailId = EmailId,message =“此人没有电子邮件。”});其中消息是视图包的名称 – Edward
在MVC中,使用HttpGet和HttpPost将允许您拥有2个相同名称的Action方法......一个用于访问页面,然后一个用于跳出页面....看到我下面的例子。它可以让你准确地发送OP所询问的内容。通常情况下,我会建议远离ViewBag,除非你可以帮助它......如果使用MVC,坚持使用强类型模型....非常强大。 – user1011627
您的'SecondView()'GET方法需要'返回View(viewModel);'并在视图中@@ Html.HiddenFor(m => m.Email)'。但GET方法的签名需要为'public ActionResult SecondView(字符串电子邮件)',并且您在方法 –