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. 解惑:NFC手机如何轻松读取银行卡信息?

    自支付宝钱包8.0推出了NFC新功能,只要将支持NFC功能的手机靠近公交卡.银行卡等带有芯片的IC卡上,可迅速读取卡内余额.卡的信息,还可以给卡进行充值,非常贴心实用. 但是很多网友表示担忧,要是别人 ...

  2. 一段高质量的SQL从问问题开始(笔记)

    首先SQL书写的目的是为了解决问题,因此只有明白了要解决的问题,才能写出更加高效的SQL语句,才能优雅的解决问题,获得更多的快乐! 在写一个SQL语句的时候不妨像优化器一样思考,问自己以下的这些问题, ...

  3. sql server 小记——分区表

    我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...

  4. Golang的Semicolons

    Semicolons The formal grammar uses semicolons ";" as terminators in a number of production ...

  5. 不靠谱的Paypal及海外网站

    昨天因为报名参加某个比赛,需要用到Paypal付款,整整折腾了我一个小时.我先是使用自己的银行储蓄卡,到最后一步需要银行确认,提示我需要安装个插件才能输入密码.安装完插件后需要重启浏览器,整个流程又要 ...

  6. Swift弹窗

    在一个ViewController中使用以下代码: let alertController = UIAlertController(title: "Game Set", messa ...

  7. 条款3:尽可能地使用const

    如下为const修饰的几种类型: char name[] = "benxintuzi"; char* p1 = name;                // non-const ...

  8. Qt的Qss样式

    http://www.cnblogs.com/coffeegg/archive/2011/11/15/2249452.html(转) http://blog.csdn.net/cgzhello1/ar ...

  9. Objective-C Foundation框架

    1.字符串 OC由两个字符串:NSString和NSMutableString,NSString代表字符序列不可变的字符串,而NSMutableString则代表字符序列可变的字符串. 1.1 创建字 ...

  10. public、protect、private在父类子类中使用

    先贴出一张,直观的.估计大家都见过的关于public.protect.private的范围图 作用域 当前类 同一package 子孙类 其他package public     T         ...