我写了一个非常简单的 Actionresult 派生自 ViewResult
public class FormResult : ViewResult
{
public override void ExecuteResult(ControllerContext context)
{
context.Controller.ViewBag.Form = "value";
base.ExecuteResult(context);
}
}
它基本上只是为 ViewBag 添加一个值。
然后我在 action 方法中返回它。
public ActionResult Index()
{
return new FormResult();
}
问题是,ViewBag 在适当的 View 中是空的。
我在这里错过了什么吗?
最佳答案
您必须从 Controller 传递 ViewData
。
public ActionResult Index()
{
return new FormResult
{
ViewData = ViewData
};
}
如果你看到
View()
方法的源代码,它是什么protected internal virtual ViewResult View(string viewName, string masterName, object model)
{
if (model != null)
{
ViewData.Model = model;
}
return new ViewResult
{
ViewName = viewName,
MasterName = masterName,
ViewData = ViewData,
TempData = TempData,
ViewEngineCollection = ViewEngineCollection
};
}
ViewData
, TempData
,.. 是从 Controller 传递过来的。关于asp.net-mvc - 自定义 ActionResult 和 viewbag,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11099752/