欢迎一起来学习MVC 3.0,我们在一步一个脚印的做一个MVC 3.0的项目,期间会有很多值得探索的地方。将会学到Razor,Lampda,Entity Framework,Linq C#新特性等等知识,一起加油吧!
在添加视图时,有一个选项是关于"创建强类型视图"(英文:Create a strongly-typed view)的。你可能会问视图怎么还有类型呢?这要从控制器Controller说起,Controller的Action返回的视图View是可以带参数的,这个参数决定视图接收的是什么,如果Action返回的值不明不白,叫接受的视图怎么能搞清楚你要做什么?
(1)还记得文件Views/MyHome/Index.cshtml吗?如(代码段1.1,图1.1)所示,当时没有创建强类型视图,完全是自行写的代码,那么删除这个文件,重新通过设定强类型的的方法做个试验,来透彻的分析下强类型视图的精髓。
代码段1.1:
@model IEnumerable<MyMusicStore.Models.Artist>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
Index</h2>
<h6>
My First MVC 3.0 APP</h6>
@{
foreach (var ins in Model)
{
<span>@ins.Name</span><br/>
}
}
图1.1
(2)选择"Create a strongly-typed view",并使用默认的模板。如图2.1
图2.1
(2)点击"Add",生成如下代码。如(代码段2.1,图2.1)
代码段2.1:
@model MyMusicStore.Models.Artist
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
图2.1
(3)此时你会发现,利用强类型生成的和我们手动写的有所区别。
最明显的是第一条语句,那么
@model MyMusicStore.Models.Artist
和
@model IEnumerable<MyMusicStore.Models.Artist>
什么区别呢?
答:显而易见,@model MyMusicStore.Models.Artist是一个Artist对象,而
@model IEnumerable<MyMusicStore.Models.Artist>是包含多个Artist对象的集合,那你又可能会问,为什么不使用 List<Artist>呢?我们使用IEnumerable<Artist> 是因为这样更通用,可以允许我们在以后改变集合为任何实现 IEnumerable 接口的集合。(List实现IEnumerable接口)
(4)既然已经领会了强类型,就用最强的类型吧。再次把代码拷回文件吧。
@model IEnumerable<MyMusicStore.Models.Artist>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
Index</h2>
<h6>
My First MVC 3.0 APP</h6>
@{
foreach (var ins in Model)
{
<span>@ins.Name</span><br/>
}
}