上一篇文章中(跟我一起学习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(二)的更多相关文章

  1. 跟我一起学习ASP.NET 4.5 MVC4.0(一)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  2. 跟我一起学习ASP.NET 4.5 MVC4.0 (转)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  3. 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  4. 跟我一起学习ASP.NET 4.5 MVC4.0(一)(转)

    由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最近想给团队成员做一个系统的解说,让大家都可以学习一下ASP. ...

  5. 跟我一起学习ASP.NET 4.5 MVC4.0(五)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  6. 跟我一起学习ASP.NET 4.5 MVC4.0(六)(转)

    这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...

  7. 跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)

    前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是权限验证,即AuthorizeAttribute.这个可以使用在控制器Controller上,也可以使用在Action ...

  8. 跟我一起学习ASP.NET 4.5 MVC4.0(三)(转)

    今天我们继续ASP.NET 4.5 MVC 4.0,前两天熟悉了MVC4.0在VS11和win8下的更新,以及MVC中的基础语法和几个关键字的使用.了解了这些就可以对MVC进一步认识,相信很多人都对M ...

  9. 跟我一起学习ASP.NET 4.5 MVC4.0(六)

    这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...

随机推荐

  1. 如何修改ls命令列出来的目录颜色

    答:默认为蓝色,在黑色背景下无法看清楚,因此以以下方法修改; 1.往~/.bash_profile文件中添加以下内容: export LS_COLORS='no=00:fi=00:di=01;33:l ...

  2. 第五次程序设计作业 C++计算器雏形 调用文件输入输出

    一.C++计算器作业系列链接 第三次作业:C++计算器雏形 第三次作业附加:代码规范 第四次作业:命令行的调用及计算 MyGithub 二.本次作业相关 要求:第五次程序设计作业 根据这一次的作业要求 ...

  3. UVa 242 邮票和信封(完全背包)

    https://vjudge.net/problem/UVA-242 题意: 输入s(每个信封能粘贴的最多邮票数量)和若干邮票组合,选出最大连续邮资最大的一个组合(最大连续邮资也就是用s张以内的邮票来 ...

  4. UVa 1603 破坏正方形

    https://vjudge.net/problem/UVA-1603 题意:有一个火柴棍组成的正方形网格,计算至少要拿走多少根火柴才能破坏所有正方形. 思路:从边长为1的正方形开始遍历,将正方形的边 ...

  5. linux 系统管理的10个小技巧

    1.恢复屏幕 尝试输入:#cat /bin/cat 输入的屏幕内容非常凌乱,那么该怎么做? 输入:#reset 那么屏幕恢复正常了,比关闭再次登录好多了,特别是经过至少5台机器和SSH2才能到达 2. ...

  6. Linux下wget下载整个FTP目录(含子目录)--转载

    wget -nH -m --ftp-user=your_username --ftp-password=your_password ftp://your_ftp_host/* 解释:-nH:不创建以主 ...

  7. 【NOI2013】向量内积

    定义两个$d$维向量${A=[a_1,a_2....a_n]}$,${B=[b_1,b_2....b_n]}$的内积为其相对应维度的权值的乘积和: $${\left \langle A,B \righ ...

  8. resource not found :rgbd_launch

    放到src下,再次编译catkin_make git https://github.com/ros-drivers/rgbd_launch.git

  9. python pstats ,profile 性能分析

    #! /usr/bin/env python # encoding=utf8 import pstats import profile def func1(): for i in range(1000 ...

  10. 环境变量.JAVA_HOME

    1.资料:(我的文章) http://www.cnblogs.com/cppskill/p/8341263.html 2. 2.1.界面 2.2.代码 unit formMain; interface ...