我写了一个非常简单的 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/

10-12 18:03