首先解释下:本文只是对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的更多相关文章

  1. Asp.net MVC4高级编程学习笔记-视图学习第三课Razor页面布局20171010

    Razor页面布局 1)  在布局模板页中使用@RenderBody标记来渲染主要内容.比如很多web页面说头部和尾部相同,中间内容部分使用@RenderBody来显示不同的页面内容. 2)  在布局 ...

  2. Asp.net MVC4高级编程学习笔记-模型学习第四课基架与模型绑定20171027

    MVC模型 一.构建基架. MVC中的基架可以为应用程序提供CURD各种功能生成所需要的样板代码.在添加控制器的时候可以选择相应的模板以及实体对象来生成相应的模板代码. 首先定义一个模型类如下所示: ...

  3. Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101

    MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...

  4. [ASP.NET MVC4高级编程] 学习记录(一)

    理论: 先有GUI在发展,当用户按下某个键,某个进程会监听到这个动作,这个进程就是控制器.这就是MVC模式. 后来有了事件驱动编程,响应动作的是按钮本身,而不是控制器. 再后来webForm中,事件驱 ...

  5. 【Android开发学习笔记】【第一课】初识New Project,工程文件介绍

    初学者新建一个Andriod工程后,往往不知道Pakage Explorer区域的每个文件是什么作用,今天学习了一下,自我总结一下. 1.先新建一个工程 2.输入名称,以及支持的SDK版本等(这些可以 ...

  6. Linux学习笔记之Linux第一课-基本介绍

    Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...

  7. ASP.NET MVC5 高级编程 第3章 视图

    参考资料<ASP.NET MVC5 高级编程>第5版 第3章 视图 3.1 视图的作用 视图的职责是向用户提供界面. 不像基于文件的框架,ASP.NET Web Forms 和PHP ,视 ...

  8. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

    参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...

  9. ASP.NET MVC5 高级编程 第2章 控制器

    参考资料<ASP.NET MVC5 高级编程>第5版 第2章 控制器 控制器:响应用户的HTTP 请求,并将处理的信息返回给浏览器. 2.1 ASP.NET MVC 简介 MVC 模式中的 ...

随机推荐

  1. 格式化JSON字符串

    提出需求 异步调用获取JSON数据时非常不直观,每次都需要格式化一次,才能直观的看到数据集合的结构,现在需要实现输出带缩进的格式. 实现效果 在浏览器的查看源文件中已经实现格式化,如果是页面使用,可以 ...

  2. 谈一谈EasyUI中TreeGrid的过滤功能

    写在最前面 这个星期一直在纠结easyui的treegrid的过滤功能,原因呢,自然是项目中一个莫名奇妙的需求. easyui虽说是后端程序员的前端框架,但是说句实话,除去api,让我直接写里面的节点 ...

  3. Android开发——xml知识之xml可绘制对象简介

    引言:摘录Android用户界面设计 Android支持各类xml可绘制对象,其中一些可绘制对象可用于实现让一个资源使用多个图片文件,另外一些则允许你在xml中真正地指定颜色,还有一些你从来都不会用到 ...

  4. tkinter第四章 输入框,校对

    #最简单的输入框 import tkinter as tk root = tk.Tk() e = tk.Entry(root)#输入框的类 e.pack() e.delete(0,tk.END)#把输 ...

  5. 转: 【Java并发编程】之二十一:并发新特性—阻塞队列和阻塞栈(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17511147 阻塞队列 阻塞队列是Java5并发新特性中的内容,阻塞队列的接口是Java. ...

  6. Java8-初识Lambda

    廉颇老矣,尚能饭否 Java,这位已经20多岁的编程语言,称得上是编程语言界的老大哥了.他曾经攻城略地,碾压各路编程语言小弟,风光无限,不可一世.现在,也是家大业大,江湖地位,很难撼动. 但是,这依然 ...

  7. 201521123109《java程序设计》第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  8. 201521123071 《JAVA程序设计》第十二周学习总结

    第12周作业-多线程 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件线程相关内容. 2. 书面作业 1. 字符流与文本文件:使用 PrintWriter(写),Buff ...

  9. JAVA课程设计个人博客 学生成绩管理 201521123001 张陈东芳

    1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现学生信息的添加功能.学生成绩的录入 ...

  10. java课程设计---计算器(201521123020 邱伟达)

    1.团队课程设计博客链接 http://www.cnblogs.com/br0823/p/7064407.html 2.个人负责模板或任务说明 1.初始化按键 2.实现加减乘除开方乘方等运算 3.每个 ...