自定义ActionResult和viewbag

时间:2012-06-19 11:12:35

标签: asp.net-mvc actionresult

我写了一个非常简单的Actionresult,它派生自ViewResult

    public class FormResult : ViewResult
    {
        public override void ExecuteResult(ControllerContext context)
        {
            context.Controller.ViewBag.Form = "value";

            base.ExecuteResult(context);
        }
    }

它基本上只是为ViewBag添加一个值。

然后我将在动作方法中返回它。

    public ActionResult Index()
    { 
        return new FormResult();
    }

问题是,ViewBag在适当的视图中为空。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分: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
    };
}

从控制器传递ViewDataTempData,..