【问题标题】:How to pass an array / model object to master layout page如何将数组/模型对象传递到主布局页面
【发布时间】:2013-02-13 22:42:26
【问题描述】:

我创建了一个 xml 文件 (layout.xml) 来将其内容呈现到布局页面,

Action LoadPage 用于反序列化这个 xml。

var ser = new XmlSerializer(typeof(MyModel));

string path = Server.MapPath(Url.Content("~/LayoutConfig/layout.xml"));

var arrList = (MyModel)ser.Deserialize(File.OpenRead(path));

如何将 arrList 传递给 mvc 主布局页面。

我已尝试设置 ViewBag.Data = arrList; 它仅适用于特定的控制器操作 我知道 ViewBag 实际上只是 ViewData 对象的一个​​包装器,它的目的是使用动态来访问数据而不是使用魔术字符串

我尝试了一个肮脏的黑客攻击,即@Html.Action("LoadPage","Main") 到主布局页面,但它对我不起作用..

我的问题是每次调用时都可以在主布局页面中获取 arrList。

感谢任何指导和帮助..!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    好吧,如果您在 ViewBag 的每个视图中都有这个键,您可以在布局页面上阅读。您可以创建自己的基控制器,它继承自 Controller 类并覆盖 OnActionExecuting 方法,以填充ViewBag 上的这个属性。在您的控制器中,您应该从这个自定义基本控制器继承,并且您将在 ViewBag 上的所有视图中获取此键,例如 asp.net mvc 使用 ViewBag 上的Title 属性。示例:

    public class InfoController : Controller 
    {   
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var ser = new XmlSerializer(typeof(MyModel));
            string path = Server.MapPath(Url.Content("~/LayoutConfig/layout.xml"));
            var arrList = (MyModel)ser.Deserialize(File.OpenRead(path));
    
            ViewBag.ArrayInfo = arrList;
    
            base.OnActionExecuting(filterContext);
        }
    }
    

    在其他控制器中:

    public class HomeController : InfoController 
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 2020-07-16
      • 2020-10-15
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      相关资源
      最近更新 更多