Asp.net mvc 为什么ViewBag是空的?

Asp.net mvc 为什么ViewBag是空的?,asp.net-mvc,viewbag,Asp.net Mvc,Viewbag,在我的MVC项目中,我有两个表单,在提交时我想重定向到同一个感谢页面 在我保存在ViewBag中的两个表单的控制器上,显示感谢页面的文本 在控制器上,我将ViewBage设置为: if (result == "success") { ViewBag.ThankYouText = "We have received your Contact us request." return RedirectToAction("Index", "ThankYou",ViewBag);

在我的MVC项目中,我有两个表单,在提交时我想重定向到同一个感谢页面

在我保存在ViewBag中的两个表单的控制器上,显示感谢页面的文本

在控制器上,我将ViewBage设置为:

if (result == "success")
   {
   ViewBag.ThankYouText = "We have received your Contact us request."

   return RedirectToAction("Index", "ThankYou",ViewBag);
   }
从“谢谢”的角度来看,我明白了:

 <p>ViewBag.ThankYouText</p>
ViewBag.ThankYouText

但是我在我的感谢页面上什么都没有


我是纯MVC新手,所以我一定做错了什么,知道吗?

你不能将ViewBag值从一个控制器传递到另一个控制器。它应该只用于将数据从控制器传递到视图

如果要在控制器之间传递数据,可以使用TempData

按以下方式更改控制器:

if (result == "success")
   {
   TempData["ThankYouText"] = "We have received your Contact us request."    
   return RedirectToAction("Index", "ThankYou");
   }
 <p>@TempData["ThankYouText"]</p>
更改您的视图,如下所示:

if (result == "success")
   {
   TempData["ThankYouText"] = "We have received your Contact us request."    
   return RedirectToAction("Index", "ThankYou");
   }
 <p>@TempData["ThankYouText"]</p>
@TempData[“ThankYouText”]

像这样更改代码

TempData["ThankYouText"] = "We have received your Contact us request.";

return RedirectToAction("Index", "your controller");
在您的索引方法中

public ActionResult Index() 
{ 
     ViewBag.ThankYouText = TempData["ThankYouText"]; return View(); 
}

并在ViewBag之前使用@keyword。ThankYouText

ViewBag
用于将数据从控制器传递到视图。您重定向到另一个方法,一旦这样做,值就会丢失。一个选项是使用
TempData
将方法传递给另一个方法。另一种方法是使用
返回重定向到操作(“Index”,“ThankYou”,new{message=“…”})
并在
ThankYou()
方法中,添加参数
字符串消息
是,您需要使用
TempData
将数据从一个控制器动作传递到另一个控制器动作,可能在第二个动作中,您可以设置viewbag,否则,临时数据将起作用too@StephenMuecke谢谢你的想法,我认为这在某种程度上比使用
tempData
更好,但我只是想知道如何在视图中获取值?如果你的方法是
public ActionResult ThankYou(string message)
,那么你可以将值分配给
ViewBag
(例如
ViewBag.ThankYouText=message;
并使用
@ViewBag.ThankYouText

,或者最好使用视图模型并将值分配给视图模型的属性,然后使用
@model.ThankYouText