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 模式中的 ...
随机推荐
- 正则表达式 提取<A>标签
功能用途 主要实现了提取html代码中的a标签和url地址. 示例代码 Regex regex = new Regex("href\\s*=\\s*(?:\"(?<1> ...
- 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能
Ajax文件上载 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能: 步骤 导入组件并准备静态脚本 <dependency> <groupId& ...
- 实现CA证书创建及客户端申请证书
author:JevonWei 版权声明:原创作品 CA证书的相关文件路径 openssl配置文件/etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf C ...
- 字符编码笔记:ASCII,Unicode和UTF-8(转)
字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个 ...
- Swing-JTable用法-入门
注:本文为学习笔记,原文为How to Use Tables,本文所有素材与代码均源于原文,可能会有部分更改. JTable是Swing中的表格控件,它的外观如下所示: 没错,excel或者acces ...
- 201521123076 《Java程序设计》第6周学习总结
1.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面 ...
- 201521123024《Java程序设计》第3周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...
- 社工数据搜索引擎搭建 - Build Social Engineer Evildata Search Engine
如何设计搭建一个社工库 从初起设计一个社工库,到现在的Beta,前前后后零零整整花了不下一个月的时间,林林总总记录下来,留给需要之人 泄露数据库格式不一,长相奇葩,因需将用户名.密码.邮箱.哈希等信息 ...
- java课程设计 猜数游戏 个人
1.团队课程设计博客链接 /http://www.cnblogs.com/ohanna/p/7064305.html 2.个人负责模块说明 1.进入界面: 2.成功玩家信息的录入: 3.信息的读出 3 ...
- jstl-初步认知
JSTL是java提供的JSP标签库 1,在项目中加入 jsf-api.jar jsf-impl.jar jstl-1.2.jar 三个包 2, 如何在jsp页面引入标签库 使用 <@tagli ...