跟我一起学习ASP.NET 4.5 MVC4.0(二)
上一篇文章中(跟我一起学习ASP.NET 4.5 MVC4.0(一))我们基础的了解了一下ASP.NET MVC4.0的一些比较简单的改变,主要是想对于MVC3.0来说的。因为这一些列主要是要给ASP.NET MVC初学者,或者还没有使用过MVC的ASP.NET开发者进行培训学习,当然也可以让我温习一下这种开发模式。所以本篇不得不讲解一下Razor的一些语法,以及在ASP.NET MVC开发中的一些技巧和开发方法。由于我在开发中不喜欢使用Entity Framework,所以这里我需要解释一下我认为的三层架构和MVC开发模式的应用。本人开发的三层架构中,数据库层和逻辑层基本不变,唯一改变的是UI层换成了MVC模式开发。当然,模型实例如果有需要会重新写,否则就会直接使用实体类进行替代,这只是我个人认识说不定是不正确的,希望各位大师能够多多指教。
首先我们来了解一下Razor的语法,在VS2010或者VS11中,添加一个试图就会让你选择使用Razor(cshtml)还是C#(ASPX)格式。Razor在语法上的美化是显而易见的,但是有时候会出现一些莫名其妙的错误,但是一般都可以得到解决,要么加HTML标签,要么是有“()”等等都可以得到解决,这个也许是在编写的Text Template对我们所写的文本解析有点问题而已。

在Razor中使用“@”来替代“<%%>”的编码格式,当然如果需要代码块,就需要用到“@{}”。在其中就可以编写C#代码,配合VS的只能解析,一般有过开发经验的人都可以很容易上手。如果你想了解更多的语法相关问题,可以参考MVC3 Razor视图引擎的基础语法,下面介绍一下在MVC中很重要的几个关键字,在编程过程中会经常使用到。
一、@model模型定义
使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类),其实是对动态变量进行实例化,这样就可以直接在cshtml文件中调用“Model”变量。而这个模型的实例,需要通过Controller进行传输,如果没有则“Model”将为null。
模型可以是一个实体类,也可以是一个列表实例,字典对象都可以进行定义,但是和Controller中的Action传回来的实例一定要一样,否则将会出现错误。例如我们获取用户实例,并且在页面上呈现用户的具体信息,这样就可以将用户实例返回给前台cshtml页面,具体代码如下。
1 /// <summary>
2 /// 获取用户信息。
3 /// </summary>
4 /// <returns>返回行为结果。</returns>
5 public ActionResult UserInfo()
6 {
7 var id = Convert.ToInt32(Request.QueryString["id"] ?? "0");
8 var user = Users.GetUser(id);
9 return View(user);
10 }
只要在cshtml页面上定义“@model User”这样这个页面的基本模型(Model)就是这个User类了,当然如果不为空的时候就可以直接调用了。
二、@section节点关键字
这里首先需要了解一下布局页面,在ASP.NET MVC中约定,以“_”开头的文件在浏览器上面是不能访问的,而“Shared”文件夹是一个共享的文件夹,或者叫做通用文件夹。一般不可以定义一个SharedController,这个我没试过,有兴趣你可以试试。而“_viewstart.cshtml”里所指定的文件就是布局页面,相当于ASP.NET里的Master页面,这样讲应该会比较好了解。每一个布局页都必须调用一个方法“@RenderBody()”,而这个@section就有点像placeholder一样,所知名的块名称需要和布局页里面定义的名称一样。

上面就可以很清楚的看到,其中required参数表示在子页面中是否一定要重写,一般不需要所以设置为false。如果是true表示所有布局页的字页面都必须要有这个节点重现的代码块,在子页面中调用可以从下面的图中看到。

由于@section header设置了required:false,所以不重写没关系,忽略他。节点一般使用“{}”包裹,而下面部分没有指定的就是Body部分了,用好布局页可以减少很多代码,这个是值得推荐的。
三、@helper方法定义
使用@helper关键字可以定义一个方法,这样就可以在页面中调用这个方法了,和C#中的方法一样。在页面中定义的方法可以访问ViewBag,HttpContext等等页面的属性,返回的类型为“HelperResult”。其他的写法和普通的方法没有区别,主要用于列表等等需要重复写进行可重复调用。
这个关键字还可以在App_Code文件夹中定义很多个方法集,我最常用的就是定义分页,比如只需要传入记录数,每页显示的记录数,以及当前页码和URL格式化参数,就可以在页面中很简单的呈现分页内容。之所以推荐在App_Code这个文件夹中定义,是因为可以省略命名空间,文件名就是类名,而定义的方法就可以直接使用“FileName.MethodName”格式调用,即静态方法类。所以在这里定义的方法,不能够使用页面上面的ViewBag等等属性。
用好了以上三个关键字不仅对MVC有一个深刻的认识,也可以使得提高编码重用度。下面我再介绍一下ASP.NET MVC中文件夹结构和MVC中的对应关系,这个对于初学者来说是个很大的问题,因为我发现刚刚进行开发的人员找不到页面,找到页面又找不到控制器。借助VS11这种文件显示结构,会更好理解,如下图所示。

从上图就可以很好的理解,Models-Views-Controllers这就组成了MVC,在Models中一般定义一些模型实体,并且会添加一些验证,这些模型实体类供控制器Controllers中的方法调用。在Controllers中定义的类型和Views文件夹下的文件夹名称相对应,文件夹名加上“Controller”就是控制器名称,这是一种命名约定就像Attribute一样。而其中的方法当然对于的就是Views下文件夹下的文件名了,这些都是一一对应的。当然有些控制器返回的如果不是试图,可以不需要定义这些文件名,但是如果是返回试图,就会出现找不到cshtml页面的错误。
注:控制器的这种命名约定只是对于Internet Application,对于WebAPI这个就不一样了。
昨天所写和今天所讲都是比较基础的,学习都需要通过循序渐进,这样才可以慢慢进入正题,我希望我所写的能够给他人带来一点收获。我没有整体规划一下写作的内容,经常都是想到什么写什么,所以可能会给初学者带来不好的感觉,敬请原谅。
跟我一起学习ASP.NET 4.5 MVC4.0(二)的更多相关文章
- 跟我一起学习ASP.NET 4.5 MVC4.0(一)
跟我一起学习ASP.NET 4.5 MVC4.0(一) 由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...
- 跟我一起学习ASP.NET 4.5 MVC4.0 (转)
跟我一起学习ASP.NET 4.5 MVC4.0(一) 由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)
前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(一)(转)
由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最近想给团队成员做一个系统的解说,让大家都可以学习一下ASP. ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(五)
前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(六)(转)
这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)
前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是权限验证,即AuthorizeAttribute.这个可以使用在控制器Controller上,也可以使用在Action ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(三)(转)
今天我们继续ASP.NET 4.5 MVC 4.0,前两天熟悉了MVC4.0在VS11和win8下的更新,以及MVC中的基础语法和几个关键字的使用.了解了这些就可以对MVC进一步认识,相信很多人都对M ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(六)
这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...
随机推荐
- Python之GUI的最终选择(Tkinter)
首先,Tkinter是Python默认的GUI库,想IDLE就是用Tkinter设计出来的,因此直接导入Tkinter模块就可以啦 1 import tkinter (1)Tkinter初体验: 1 ...
- BZOJ1407: [Noi2002]Savage exgcd
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
- CSS3屏幕密集媒体查询
html { font-size: 50px; } body { font-size: 24px; } @media screen and (max-width: 359px) { html { fo ...
- [js] - 关于js的排序sort
js的排序sort并不能一次排序好 function solution(nums){ return nums.sort(sortNumber); } function sortNumber(a, b) ...
- C++课程上 有关“指针” 的小结
上完了C++的第二节课以后,觉得应该对这个内容进行一个小结,巩固知识点,并对我的心情进行了一个侧面烘托... 开始上课的老师: 正在上课的我: 上去敲代码的我: 过程是这样的: 下来的我: 非常的尴尬 ...
- C# 二进制图片串互转
C# byte数组与Image的相互转换 功能需求: 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库. 2.把从数据库读取的byte数组转换为Image对 ...
- Codeforces 909C - Python Indentation
909C - Python Indentation 思路:dp. http://www.cnblogs.com/Leohh/p/8135525.html 可以参考一下这个博客,我的dp是反过来的,这样 ...
- 记录Vmware Workstation及Centos6.8 的安装
网上找到的一个非常详细的安装详解.个人觉得非常好.于是加保存一下.地址:http://www.mamicode.com/info-detail-1462939.html
- C# Arc Gis实例教程——网络链接
http://www.doc88.com/p-305888679879.html http://www.doc88.com/p-992232217007.html http://www.cnblogs ...
- Java 历史
James Gosling 最初开始 Java 语言项目是在 1991 年的 7 月.Java 被用在他的许多 set-top box 工程中.这个语言最开始的时候被称为 Oka,这个是因为 Jame ...