如何将数组/模型对象传递给主布局页面

时间:2013-02-13 14:12:47

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

我已经创建了一个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。

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

1 个答案:

答案 0 :(得分:0)

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

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);
    }
}