ASP.NET MVC是一种构建web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架;

ASP.NET约定优于配置;基本分为模型(对实体数据的描述)、视图(一个动态生成HTML页面的模板)、控制器(协调用户的请求返回模型实体或返回其他数据根据对应模板动态生成html返回给用户)

请求都是先经过Controller找到下面的Action(即返回值为ActionResult的方法);在默认路由的情况下,/Home/Index 则请求的是HomeController类下面的Index方法,返回视图名称为Index的视图;HomeController名称必须是整个MVC程序中唯一的类名称,访问HomeController不需要区分文件夹的嵌套;HomeController查找Index视图模板(在不具体指定渲染哪个模板的时候)是先查找Views文件下面的Home文件下的index名称的模板;如果没有就会查找Views下面的Shared文件下的index名称的模板;

以下将从视图、控制器、模型以及一些相关知识点讲起;

Razor视图(模板):它本身不会被直接访问,浏览器不能指向一个视图并渲染它,然而,视图总是被一个控制器渲染,该控制器向它提供了要渲染的数据;

Razor视图语法:

1、  模板中定义代码块


即可以在页面打印时间

2、代码与HTML标签嵌套书写@开始即为C#语义解释

3、 当定义如下

@{
string name = "name";
}
<li>@name.Model</li>

  我们想输出name.Model的时候视图解释的时候就不会被编译通过;此时就需要@(name).Model这样才能输出name.Model,括号是告诉解释器括号内的东西需要进行编译解释;

  4、  现在我们想在视图中打印出邮箱后缀@qq.com此时Razor会将@qq.com当作C#代码来解释执行,这时我们需要2个@来对一个@进行转义,比如@@qq.com;但是如果我们输入184057662@qq.com与184057662@@qq.com结果都是一样的;因为在@前面有字符串连接,后面会自动当作字符串处理;而@@会被转义成一个@所以两个结果是一样;(输出@还可以使用&#64代替)

5、 接上面,qq是一个C#代码的变量,我们需要打印184057662@qq.com该如何?如何?

 @{
string qq = "telnet";
}
184057662@qq.com

现在视图完全理解错了我的意思;此时我们只要按照3中的解决办法给@qq改为  @(qq)即可输出184057662telnet.com

6、  页面中除了文本还会有js,我们定义如下:

 @{
string mess = "<h1>Hello Razor</h1>";
}
@mess

此时输出的文本就是原来定义的字符串文本,会把Hello Razor变为H1标签包裹;
      此时有两种方法处理第一种是我们需要用到Html辅助方法进行处理@Html.Raw(mess)将mess进行html编码后进行输出

另一种是在定义的时候创建MvcHtmlString

@{
string mess = "<h1>Hello Razor</h1>";
MvcHtmlString messHtml = new MvcHtmlString(mess);
}
@messHtml

同样也适用于定义mess=” <script>alert('Hello Razor');</script>”的脚本提示;

7、  在代码中定义如下

 @{
bool showMess = true;
}
@if (showMess) {
this is TextAreaExtensions
}

我们在判断完showMess的值后只想打印文本this is TextAreaExtensions,但razor却还认为括号里面是表达式;此时我们需要在里面用<></>括号的标签折断if语义的继续判断一般嵌套一个<div></div>即可;

或者按照如下

@if (showMess) {
@:this is TextAreaExtensions
}

8、  服务器端的注释为@**@

9、 视图布局模板(母版页)

<body>
<div class="page">
<div id="main">
@RenderBody()
</div>
</div>
</body>

在main div中有个@RenderBody();在需要用到母版页的cshtml中如下即可

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<p>
将内容放置在此处。
</p>

在视图中如果不主动指定Layout为具体母版或null则会默认寻找/Views/_ViewStart.cshtml页面为母版页;

  还可以在页面中添加一些页脚节点比如

<body>
<div class="page">
<div id="main">
@RenderBody()
</div>
<div id="footer">
<footer>@RenderSection("Footer")
</footer>
</div>
</div>
</body>

  使人页脚节点如下:

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<p>
将内容放置在此处。
</p>
@section Footer{
这是页脚节点
}

Razor视图只是MVC中视图引擎中的一种,还有我们熟知的aspx视图引擎,还有很多第三方的视图引擎比如:Spark、NHaml、Brail等;所以至此,千万不要把视图当成普通的页面来看待,视图引擎可以根据Controller的控制编译出页面呈现给用户;

Razor视图引擎 语法学习(一)的更多相关文章

  1. Razor视图引擎 语法学习(二)

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

  2. Razor视图引擎 语法学习

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

  3. ASP.NET MVC学习---(七)Razor视图引擎语法

    之前体验过razor视图引擎@符号的威力了吧~ 连我这个初学者都能感觉到确实省时省力方便快捷 简直就是居家旅行*人*货必备之物啊(这里和谐两个字~) 那么现在就开始对razor的语法进一步介绍~ 1. ...

  4. Razor视图引擎语法

    @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...

  5. Razor视图引擎 语法

  6. ASP.NET MVC 3 Razor 视图引擎 基本语法

    本篇博文将进入MVC 3 的世界了,首先学习一下MVC 3 新增的Razor视图引擎的基本语法. 1. 使用 @ 字符将代码添加到页面中.正如传统的aspx视图的<% %>相同.      ...

  7. ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

    一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...

  8. ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

    一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...

  9. ASP.NET MVC3 系列教程 - Razor视图引擎基础语法

    http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...

随机推荐

  1. 算法系列9《MD5》

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现. ...

  2. EMVTag系列15《选择应用响应数据》

    1. 接触交易选择应用响应数据 标签 长度 数据域 9102 A5 变长 FCI专用模板 强制 50 1–16 应用标签 纯电子现金:PBOC DEBIT 借记卡:PBOC DEBIT 贷记卡:PBO ...

  3. Android HTTP session && cookie

    HTTP协议与状态保持HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是 ...

  4. yum代理设置

    vi /etc/yum.conf 加入以下:proxy=http://代理服务器ip:port 如果代理需要账号密码:proxy_username=userproxy_password=密码

  5. Linux下安装MySQLdb模块

    1,查看是否已安装MySQLdb模块 进入python的命令行,输入 import MySQLdb 如果没有报错,证明此模块已经安装,可以跳过以下步骤. 2,下载最新的MySQLdb安装包: wget ...

  6. 从零开始学ios开发(三):第一个有交互的app

    感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12 ...

  7. linux - 自动删除n天前日志

    1.删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -m ...

  8. Teamwork——Week4 团队项目之NABC

    项目框架——NABC模型 一.N(Need需求) 我们组主要的用户对象是第三小组——UI小组的同学们,因此我们的用户需求就是他们的数据需求. 1)提供给UI小组整理好的数据库,和前一组讨论好数据结构. ...

  9. Node.js 学习(四)Node.js 回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  10. python+selenium浏览器调用(chrome、ie、firefox)

    代码: #coding=utf-8 from selenium import webdriver driver=webdriver.Chrome() #调用chrome浏览器 driver.get(' ...