我需要將數據從一個控制器動作傳遞給另一個。 我不想用將數據從一個控制器動作傳遞到另一個控制器動作在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(字符串電子郵件)',並且您在方法 –