3

我写了一个从 ViewResult 派生的非常简单的 Actionresult

    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 在适当的视图中是空的。

我在这里错过了什么吗?

4

1 回答 1

4

您必须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.. 从控制器传递。

于 2012-06-19T11:17:26.133 回答