首先解释下:本文只是对Asp.net MVC4高级编程这本书学习记录的学习笔记,书本内容感受挺简单的,但学习容易忘记,所以在边看的同时边做下了笔记,可能其它朋友看的话没有情境和逻辑顺序还请谅解!html
以下以HomeController控制器中的代码为例:web
public ActionResult Sample()编程
{学习
ViewBag.Message = "MySampleView";spa
return View(); //注意这里是渲染Views目录下的Home子目录(经过HomeController中的Home来找到子目录Home)下视图名称为action名称值为Sample(public ActionResult Sample()为HomeControll声明的action名称为Sample)的视图,文件名为Sample.cshtml.net
public ActionResult Sample()htm
{对象
ViewBag.Message = "MySampleView";ci
return View(“MySampleView”);//注意这里是渲染Views目录下的Home子目录下视图名称为MySampleView的视图,文件名为MySampleView.cshtml。开发
}
public ActionResult Sample()
{
ViewBag.Message = "MySampleView";
return View(“~/Views/Example/Index.cshtml”);//这里是常数Views目录下的Example子目录下的视图Index的视图,文件名为Index.cshtml。
}
ViewData是一种字典数据类型。
Example:
ViewData[“CurrentTime”]=DateTime.Now;
ViewBag是一种动态数据类型(dynamic)。上面的ViewData赋值等价于下面的赋值
Example:
ViewBag.CurrentTime=DateTime.Now;
注意差别:若是ViewData中的key有空格是不能用ViewBag访问的,好比
ViewData[“full name”]是不能转换成ViewBag式的;另外就是ViewBag中的值是不能做为参数传递的,由于不肯定数据类型,除非使用ViewData方式传参或者强制数据类型转换,好比
@Html.TextBox(“name”,ViewBag.name);这种写法编译是通不过的,须要改为以下两种形式,
@Html.TextBox(“name”,ViewData[“name”]);
@Html.TextBox(“name”,(string)ViewBag.name);
ViewData是一种ViewDataDictionary类型,并不是仅仅是Dictionary类型,它有一个Model属性,能够用来在视图中获取指定的模型对象。例如用它来在视图中传递指定模型:
public ActionResult List()
{
var albums=new List<Album>();
for(int i=0;i<10;i++)
{
albums.Add(new Album{Title=”Album”+i})
}
return View(albums);
}
在后台须要先把View方法中的参数值赋给ViewData.Model属性。而后告知视图哪一种类型的模型正在使用@model声明。注意这里须要输入模型类型的彻底限定类型名(命名空间和类型名称),以下所示:
//参数值赋给ViewData.Model属性
@model IEnumberable<MVCApplication1.Models.Album>
<ul>
@foreach(Album p in Model)
{
<li>@p.Title</li>
}
</ul>
若是不想输出完整类型名可使用using。
@using MVCApplication1.Models
//参数值赋给ViewData.Model属性
@model IEnumberable< Album>
<ul>
@foreach(Album p in Model)
{
<li>@p.Title</li>
}
</ul>
对于视图常常使用的命名空间,能够在View目录下的web.config中配置<add namespace="LYG.HelloWorld" />
Example:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="LYG.HelloWorld" />
</namespaces>
</pages>
</system.web.webPages.razor>
经过MVC的模型Model在传入视图时,每每有一个主视图多个从视图或其它无关信息好比登录信息、用户权限信息等。咱们能够考虑主视图声明到@model中,其它信息放到ViewData中。但这样作并不是适合全部人开发需求,如要要严格控制视图流入的数据,就必须全部数据都是强类型,以便视图编写人员能智能感知。这里所以引入视图模型的概念,就是把全部数据再组合成一个模型成为视图模型传入到@model中,好比以下购物车视图模型包括主视图产品信息,其它信息总价格和显示给用户的消息的代码示例。
Public class shoppingCatViewModel
{
Public IEnumberable<Product> products{get;set} //主视图
Public decimal totalPrice{get;set;} //总价格
Public string message{get;set;} //显示给用户的消息
}
而后经过@model shoppingCatViewModel 向这个模型中强制性地输入一个视图。
今天的学习到此为此,下一课将详细介绍Razor语法。