Asp.net mvc 为什么ViewBag是空的?
在我的MVC项目中,我有两个表单,在提交时我想重定向到同一个感谢页面 在我保存在ViewBag中的两个表单的控制器上,显示感谢页面的文本 在控制器上,我将ViewBage设置为: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);
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