【问题标题】:Custom ActionResult and viewbag自定义 ActionResult 和 viewbag
【发布时间】:2012-06-19 11:12:34
【问题描述】:

我写了一个从 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 在适当的视图中是空的。

我在这里错过了什么吗?

【问题讨论】:

    标签: asp.net-mvc actionresult


    【解决方案1】:

    你必须从控制器传递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,.. 是从控制器传递过来的。

    【讨论】:

    • 感谢这对我也有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2016-04-14
    相关资源
    最近更新 更多