Razor视图引擎 语法学习(一)
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结果都是一样的;因为在@前面有字符串连接,后面会自动当作字符串处理;而@@会被转义成一个@所以两个结果是一样;(输出@还可以使用@代替)
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视图引擎 语法学习(一)的更多相关文章
- Razor视图引擎 语法学习(二)
下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...
- Razor视图引擎 语法学习
下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...
- ASP.NET MVC学习---(七)Razor视图引擎语法
之前体验过razor视图引擎@符号的威力了吧~ 连我这个初学者都能感觉到确实省时省力方便快捷 简直就是居家旅行*人*货必备之物啊(这里和谐两个字~) 那么现在就开始对razor的语法进一步介绍~ 1. ...
- Razor视图引擎语法
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- Razor视图引擎 语法
- ASP.NET MVC 3 Razor 视图引擎 基本语法
本篇博文将进入MVC 3 的世界了,首先学习一下MVC 3 新增的Razor视图引擎的基本语法. 1. 使用 @ 字符将代码添加到页面中.正如传统的aspx视图的<% %>相同. ...
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...
- ASP.NET MVC3 系列教程 - Razor视图引擎基础语法
http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...
随机推荐
- eclipse java 空心J文件的回复
eclipse中的空心J的java文件,表示当前文件不包含在项目中进行编译,而仅仅是当做资源存在项目中. 解决方案如下: 1.鼠标右击当前空心j文件,-->build path-->inc ...
- 在windows上使用symfony创建简易的CMS系统(一)
http://blog.csdn.net/kunshan_shenbin/article/details/7164675 参考自:http://xsymfony.801.cxne.net/forum. ...
- NPOI导出Excel文件,对单元格的一些设置
HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...
- HTML5做的浏览器欢迎界面自动跳转
HTML5做的浏览器欢迎界面自动跳转 思路很简单,随手装逼呗.根据时间来控制背景图和文字,背景图加了毛玻璃效果,效果直接看图,用javascript来实现. 完整代码 <!DOCTYPE htm ...
- <<梦断代码>>读书笔记
从任何角度,Chandler项目开始时都是值得羡慕的.虽然是讲一个软件项目是如何失败的,不过里面有让我觉得很有意思. 失败了就进行反思:定位不能逆时代的潮流, 互联网的趋势不可逆转,人员沟通与合作是永 ...
- text-overflow 与 word-wrap:设置使用一个省略标记...标示对象内文本的溢出。
text-overflow 与 word-wrap text-overflow用来设置是否使用一个省略标记(...)标示对象内文本的溢出. 语法: 但是text-overflow只是用来说明文字溢出时 ...
- (转)-编写第一个ROS(创建工作空间workspace和功能包package)
原文网址:http://www.cnblogs.com/liuamin/p/5704281.html 刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配 ...
- Python字符编码详解
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
- 【Binary Tree Level Order Traversal】cpp
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- 【LRU Cache】cpp
题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...