ASPX 和 Razor
在asp.net mvc 模式中,视图引擎有两类: ASPX(ASP.NET) 和 Razor
1.aspx引擎
如果选择了aspx引擎,那么就是asp.net引擎。
那么什么是asp.net?
1)是微软.net框架的主要部分
2)是一种服务器段脚本技术:可以使(嵌入网页中的脚本)由服务器执行
3)是asp和.net的技术结合。提供基于组件、事件驱动的可编程网络表单,降低了编程复杂度
4)asp.net是一种部署在IIS中的程序
什么是asp.net文件?
1)asp.net文件类似于html文件,但是可以包含HTML、XML以及脚本
2)asp.net文件中的脚本在服务器上运行
3)asp.net文件的文件后缀是“.aspx”
asp.net如何工作?
当浏览器请求html文件时,服务器会返回该文件;
当浏览器请求asp.net文件时,iis会把该请求传递给服务器上的asp.net 引擎,
asp.net引擎会逐步读取该文件,并执行文件中的脚本,
最后,asp.net文件会以纯HTML的形式返回给浏览器
2.Razor 引擎
什么是Razor?
Razor是一种允许向网页中嵌入基于服务器的代码(Vb和C#)的标记语法,
是一种服务器代码和HTML代码混写的代码模板,类似于没有后置代码的.aspx文件。
Razor英文含义:剃须刀,在这里可以引申为让代码更简单、整洁的意思
Razor支持的文件类型?
Razor支持两种文件类型,分别是 .cshtml和.vbhtml;
.cshtml的服务器代码使用了C#语法
.vbhtml的服务器代码使用了vb.net语法
工作原理?
当网页被写入浏览器时,基于服务器的代码能够动态创建内容。
在网页加载时,服务器在向浏览器返回页面之前,会执行页面内的基于服务器的代码。
由于是在服务器上运行,这种代码能执行复杂的任务,比如数据库访问
razor 语法?
1)@符号是razor中的重要符号,被定义为Razor代码块的开始符号;
2)使用 @{代码片段} 这种格式来定义一段代码
3)Razor支持代码混写,在Razor代码块中插入html,在html中插入Razro语句
<span style="font-family:Microsoft YaHei;font-size:18px;">@for (int i = 0; i < 10; i++)
{
<p>@i</p>
}
@if (ViewData.Count > 0)
{
<p>ViewData有数据</p>
ViewData["Key"] = "Edison Chou";
}
else
{
<p>ViewData暂无数据</p>
}
</span>
layout页面中的@RenderBody()
layout页面即母版页可以理解成网站的框架,通用层面的东西,而@RenderBody相当于一个占位符,
一个网站有可能有多个模块,即有不同功能的网页,每个功能的网页的index页面都是用同一个layout页面,
这样在加载页面的时候遇到@RenderBody()就会加载对应模块的index.cshtml页面
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
</head>
<body>
<div class="page">
<div id="header">
<div id="title">
<h1>我的 MVC 应用程序</h1>
</div>
<div id="logindisplay">
@Html.Partial("_LogOnPartial")
</div>
<div id="menucontainer">
<ul id="menu">
<li>@Html.ActionLink("主页", "Index", "Home")</li>
<li>@Html.ActionLink("关于", "About", "Home")</li>
</ul>
</div>
</div>
<div id="main">
@RenderBody()
</div>
<div id="footer">
</div>
</div>
</body>
</html>
aspx和razor引擎 比较
相同点:
都可以实现向HTML中插入服务器代码的技术;
执行顺序相同;
基于ASP.NET
Razor好处:
- Razror是为web应用程序的创建而单独设计
2)它拥有传统的asp.net 标记能力,但较aspx语法更简单,更容易使用和学习
如下,同一段代码用ASPX引擎和Razor引擎,Razor引擎格式的更简单:
//aspx引擎
<span style="font-family:Microsoft YaHei;font-size:18px;"><%if (Model != null)
{%>
<p><%=Model%></p>
<%}%>
<%else
{%>
//Do something
<%}%></span>
//razor引擎
<span style="font-family:Microsoft YaHei;font-size:18px;">@if (Model != null)
{
<p>@Model</p>
}
else
{
//Do something
}</span>
HtmlHelper类
功能:生成有数据绑定的Html标签。
为什么会出现?
许多时候我们会遇到如下场景在写一个编辑数据的页面时,我们通常会写如下代码。于是我们思考,对于这种代码我们是不是也可以用一个Helper来自动绑定数据呢?这当然是可以的,ASP.NET MVC提供了一个HtmlHelper用于生成有数据绑定的Html标签。看,这个类没有什么特别的吧。就是辅助我们使用Html进行编程的一个工具类。在MVC模式中,在View中,我们可以直接通过这个工具类(HtmlHelper)来读取数据实体值,给Html标签赋值。
在View中是不是都得使用HtmlHlper?
主要是需要数据绑定的Html标签。比如表单与Models的绑定,所以在MVC中表单和链接还是推荐用HtmlHelper,其他的可以根据需要使用在Html和HtmlHelper中进行选择。
HtmlHelper方法汇总,点击这里查看