Asp.net mvc razor - 将数据发送到主布局

Mus*_*afa 4 asp.net asp.net-mvc-4

我是asp.net mvc的新手.我创建了一个asp.net mvc4空应用程序并添加了一个实体模型.我有一个布局页面,我想显示菜单类别,页眉,页脚vb.但我怎样才能将包含一个实体对象(最后的帖子,类别,标签)的数据发送到布局页面?谢谢

Mar*_*rko 12

如果要将数据(来自我假设的数据库)传递到布局视图,您将面临一种情况,即您将数据传递到应用程序中的每个页面.所以我要做的是创建一个基本控制器,所有控制器都将从该控制器继承:

public class BaseController : Controller
{
   public LayoutModel model;

   public BaseController()
   {
       // Here you will use some business logic to populate your Layout Model
       // You might also consider placing this model into the cache to prevent constant fetching of data from the database on each page request.
       model = _service.Populate();
       ViewBag.LayoutModel = model;
   }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用基本控制器的构造函数来获取布局视图所需的数据.我创建了一个名为model的属性,并使用了一些名为Populate的业务逻辑方法(您需要自己编写)来填充模型变量.然后我将模型放入ViewBag.

一旦我完成了这个设置,那么我在我的解决方案中创建的每个控制器都需要从基础控制器继承:

public class HomeController : BaseController
{
   // Controller code here...
}
Run Code Online (Sandbox Code Playgroud)

这意味着每个控制器现在都可以从基本控制器访问模型属性.

从这里你可以像这样在每个视图上使用ViewBag.LayoutModel(在视图的顶部声明一个局部变量并将其转换为底层类型):

@{
   LayoutModel MenuModel = ViewBag.LayoutModel;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

@MenuModel.SomeProperty
Run Code Online (Sandbox Code Playgroud)

这只是其中一种方法,但还有其他更少/更复杂的方法.你需要自己做一些研究,看看哪种技术最适合你......