看到这标题有点怪,一般情况之下,我们很容易在视图与部分视图中使用模型(model),但是如果想在布局页_Layout.cshtml页中使用模型(model),按照普通方式也许没有达到预期的效果,在实现时有些情况需要注意的。


下面先按原先我们的设计,在控控制器创建三个视图操作(Action):

ASP.NET MVC在布局页上使用模型(model)_ASP.NET MVC

 

创建一个布局页_May15.cshtml,然后上面的三个视图均引用此布局页.

ASP.NET MVC在布局页上使用模型(model)_VIEW_02

 

现在我们根据控制器的Action分别创建三个视图,Index.cshtml:

ASP.NET MVC在布局页上使用模型(model)_Model_03

 

PageA.cshtml:

ASP.NET MVC在布局页上使用模型(model)_VIEW_04

 

PageB.cshtml:

ASP.NET MVC在布局页上使用模型(model)_Model_05

 

OK,现在我们回至_May15.cshtml写model代码,添加下面标记1至标记3:

ASP.NET MVC在布局页上使用模型(model)_Controller_06

现在我们分别浏览视图Index.cshtml,PageA.cshtml和pageB.cshtml:

ASP.NET MVC在布局页上使用模型(model)_ASP.NET MVC_07

 

ASP.NET MVC在布局页上使用模型(model)_MVC_08

 

ASP.NET MVC在布局页上使用模型(model)_ASP.NET MVC_09

 


为什么视图Index.cshtml能正常显示,而PageA与PageB不能呢? 回过头去看控制器,只有Index控制器有返回return View(xxx):

如果三个控制器使用相同的代码,肯定是没有问题,对吧:

ASP.NET MVC在布局页上使用模型(model)_Controller_10

但是实际上,我们不能这样去做,因为不同的视图,就是想表现不同的内容。这就是我们需要解决的地方。


下面是Insus.NET解决的方法,控制器中把三个操作改为:

ASP.NET MVC在布局页上使用模型(model)_MVC_11

 

接下来,我们只去修改布局页_May15.cshtml:

ASP.NET MVC在布局页上使用模型(model)_MVC_12

 

完成了,看到上面的代码了吧,就是这两行代码。其它视图均无需修改任何,它原本是怎样写,就是怎样写。

现在我们浏览三个视图,肯是没有问题的:

ASP.NET MVC在布局页上使用模型(model)_Model_13