Asp.net MVC4高级编程学习笔记-视图学习第一课20171009
首先解释下:本文只是对Asp.net MVC4高级编程这本书学习记录的学习笔记,书本内容感觉挺简单的,但学习容易忘记,因此在边看的同时边作下了笔记,可能其它朋友看的话没有情境和逻辑顺序还请谅解!
一、MVC控制器渲染视图的三种方式。
如下以HomeController控制器中的代码为例:
1、默认方式
public ActionResult Sample()
{
ViewBag.Message = "MySampleView";
return View(); //注意这里是渲染Views目录下的Home子目录(通过HomeController中的Home来找到子目录Home)下视图名称为action名称值为Sample(public ActionResult Sample()为HomeControll声明的action名称为Sample)的视图,文件名为Sample.cshtml
2、指定视图名称方式
public ActionResult Sample()
{
ViewBag.Message = "MySampleView";
return View(“MySampleView”);//注意这里是渲染Views目录下的Home子目录下视图名称为MySampleView的视图,文件名为MySampleView.cshtml。
}
3、指定不同目录下视图方式
public ActionResult Sample()
{
ViewBag.Message = "MySampleView";
return View(“~/Views/Example/Index.cshtml”);//这里是常数Views目录下的Example子目录下的视图Index的视图,文件名为Index.cshtml。
}
二、控制器通过ViewData和ViewBag向视图传递信息。
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语法。
Asp.net MVC4高级编程学习笔记-视图学习第一课20171009的更多相关文章
- Asp.net MVC4高级编程学习笔记-视图学习第三课Razor页面布局20171010
Razor页面布局 1) 在布局模板页中使用@RenderBody标记来渲染主要内容.比如很多web页面说头部和尾部相同,中间内容部分使用@RenderBody来显示不同的页面内容. 2) 在布局 ...
- Asp.net MVC4高级编程学习笔记-模型学习第四课基架与模型绑定20171027
MVC模型 一.构建基架. MVC中的基架可以为应用程序提供CURD各种功能生成所需要的样板代码.在添加控制器的时候可以选择相应的模板以及实体对象来生成相应的模板代码. 首先定义一个模型类如下所示: ...
- Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101
MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...
- [ASP.NET MVC4高级编程] 学习记录(一)
理论: 先有GUI在发展,当用户按下某个键,某个进程会监听到这个动作,这个进程就是控制器.这就是MVC模式. 后来有了事件驱动编程,响应动作的是按钮本身,而不是控制器. 再后来webForm中,事件驱 ...
- 【Android开发学习笔记】【第一课】初识New Project,工程文件介绍
初学者新建一个Andriod工程后,往往不知道Pakage Explorer区域的每个文件是什么作用,今天学习了一下,自我总结一下. 1.先新建一个工程 2.输入名称,以及支持的SDK版本等(这些可以 ...
- Linux学习笔记之Linux第一课-基本介绍
Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...
- ASP.NET MVC5 高级编程 第3章 视图
参考资料<ASP.NET MVC5 高级编程>第5版 第3章 视图 3.1 视图的作用 视图的职责是向用户提供界面. 不像基于文件的框架,ASP.NET Web Forms 和PHP ,视 ...
- ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...
- ASP.NET MVC5 高级编程 第2章 控制器
参考资料<ASP.NET MVC5 高级编程>第5版 第2章 控制器 控制器:响应用户的HTTP 请求,并将处理的信息返回给浏览器. 2.1 ASP.NET MVC 简介 MVC 模式中的 ...
随机推荐
- [Unity 设计模式]桥接模式(BridgePattern)
1.前言 继上一讲IOC模式的基础上继续本讲桥接模式,笔者感觉桥接模式是23种设计模式中桥接模式是最好用但也是最难理解的设计模式之一,23中设计模式就好武侠剧中一本武功秘籍,我们在工作过程中想要熟练运 ...
- centos 7 && dotnet core 2.0 && nginx && supervisor
前提 系统:centos 7 目录:/home/wwwroot/www.wuball.com dotnet core 2.0 官方指引 sudo rpm --import https://packag ...
- 个人作业1——四则运算题目生成程序(基于C++)
题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 1 ...
- 【Beta阶段】第四次scrum meeting
Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 查找适合的素材模块,和105一起把手势功能连接到APP上 100% 查阅换 ...
- 201521123081《Java程序设计》 第2周学习总结
201521123081<Java程序设计>第2周学习总结 2017-03-04 14:35:49 1. 本周学习总结 学习了Java一些基本语句,了解了变量类型及其相互转化的方法: 学 ...
- 关于百度DNS的解析过程
if现在我用一台电脑,通过ISP接入互联网,那么ISP就会分配给我一个DNS服务器(非权威服务器). now,我的computer向这台ISPDNS发起请求查询www.baidu.com. 首先,IS ...
- 201521123033《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123115《java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...
- Linux系统下用户与组的管理
Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...
- JavaSE(十)之Collection总结
前面几篇把集合中的知识大概都详细的说了一遍,但是我觉得还是要总结一下,这样的话,可以更好的理解集合. 一.Collection接口 首先我们要一张图来说明: Collection接口,它是集合的顶层接 ...