在 C# ASP.NET MVC 模式中使用 RedirectToAction 将 ViewData 传递给 ActionResult
Pass ViewData to ActionResult using RedirectToAction in C# ASP.NET MVC Pattern
我有一个表单,一旦提交,将根据输入的内容结合服务器端计算进行一些复杂的路由。我想通过 RedirectToAction 将从第一种形式收集的数据传递给第二种形式。
起初我以为我可以执行 RedirectToAction 以通过 POST 方法干净地传递数据,但似乎没有简单的方法可以做到这一点。阅读更多 我想看看是否有一些简单的方法可以通过 RedirectToAction 将 Hashtable 或 ViewData 传递到正确的 ActionResult 并读取变量,但这比我想象的更具挑战性。
这是我正在尝试的简化版本。
[AcceptVerbs("GET","POST")]
public ActionResult Step8(int id = 0, Hashtable FormValues = null) {
// was this a redirect back to us?
if (FormValues != null && FormValues.Count > 0) {
if (FormValues.ContainsKey("title") && FormValues["title"] != null) {
string _title = FormValues["title"].ToString();
}
}
// the form in thie view redirects to Step9
return View();
}
[AcceptVerbs("POST")]
public ActionResult Step9(int id = 0) {
bool issue_found = true;
if(issue_found){
// hypothetical issue found, back to previous step
Hashtable _FormValues = new Hashtable();
_FormValues.Add("title", "My Title");
_FormValues.Add("product", "My thing");
return this.RedirectToAction("Step8", _FormValues);
}else{
// .. do stuff
return View();
}
}
我做错了什么?我怎样才能传递这些数据?
该方法比需要的更复杂。 TempData 在 Redirect 中幸存下来,所以这就是我所做的。这是一个可行的解决方案:
[AcceptVerbs("GET","POST")]
public ActionResult Step8(int id = 0) {
string _product = "";
string _title = "";
// was this a redirect back to us?
try {
if (TempData != null) {
if (TempData.ContainsKey("product") && TempData["product"] != null) {
_product = TempData["product"].ToString();
}
if (TempData.ContainsKey("title") && TempData["title"] != null) {
_title = TempData["title"].ToString();
}
}
} catch {}
// The form in this view performs a POST to Step9
return View();
}
[AcceptVerbs("POST")]
public ActionResult Step9(int id = 0) {
bool issue_found = true;
if(issue_found){
// hypothetical issue found, back to previous step
TempData["title"] = "My Title";
TempData["product"] = "My thing";
return this.RedirectToAction("Step8");
}else{
// .. do stuff
return View();
}
}
我有一个表单,一旦提交,将根据输入的内容结合服务器端计算进行一些复杂的路由。我想通过 RedirectToAction 将从第一种形式收集的数据传递给第二种形式。
起初我以为我可以执行 RedirectToAction 以通过 POST 方法干净地传递数据,但似乎没有简单的方法可以做到这一点。阅读更多 我想看看是否有一些简单的方法可以通过 RedirectToAction 将 Hashtable 或 ViewData 传递到正确的 ActionResult 并读取变量,但这比我想象的更具挑战性。
这是我正在尝试的简化版本。
[AcceptVerbs("GET","POST")]
public ActionResult Step8(int id = 0, Hashtable FormValues = null) {
// was this a redirect back to us?
if (FormValues != null && FormValues.Count > 0) {
if (FormValues.ContainsKey("title") && FormValues["title"] != null) {
string _title = FormValues["title"].ToString();
}
}
// the form in thie view redirects to Step9
return View();
}
[AcceptVerbs("POST")]
public ActionResult Step9(int id = 0) {
bool issue_found = true;
if(issue_found){
// hypothetical issue found, back to previous step
Hashtable _FormValues = new Hashtable();
_FormValues.Add("title", "My Title");
_FormValues.Add("product", "My thing");
return this.RedirectToAction("Step8", _FormValues);
}else{
// .. do stuff
return View();
}
}
我做错了什么?我怎样才能传递这些数据?
该方法比需要的更复杂。 TempData 在 Redirect 中幸存下来,所以这就是我所做的。这是一个可行的解决方案:
[AcceptVerbs("GET","POST")]
public ActionResult Step8(int id = 0) {
string _product = "";
string _title = "";
// was this a redirect back to us?
try {
if (TempData != null) {
if (TempData.ContainsKey("product") && TempData["product"] != null) {
_product = TempData["product"].ToString();
}
if (TempData.ContainsKey("title") && TempData["title"] != null) {
_title = TempData["title"].ToString();
}
}
} catch {}
// The form in this view performs a POST to Step9
return View();
}
[AcceptVerbs("POST")]
public ActionResult Step9(int id = 0) {
bool issue_found = true;
if(issue_found){
// hypothetical issue found, back to previous step
TempData["title"] = "My Title";
TempData["product"] = "My thing";
return this.RedirectToAction("Step8");
}else{
// .. do stuff
return View();
}
}