Razor视图引擎布局
- 不需要像过去aspx一样,使用.Master文件,而是统一使用.cshtml 或 .vbhtml文件。但文件名一般以 _开头,这样做文件不会当做View显示出来
- 使用@RenderBody() 表示替换主体部分
- 使用@RenderSection()可以自定义替换部分,
先布局页使用@RenderSection("Head", false) 定义一个要替换的区域,第一个参数表示替换区域名称,第二个参数为可选参数,false表示可以不必一定在页面中替换,true表不必须被替换
然后在内容页中使用
@section Head{
输出给头部的内容
}
引用布局页
方式一
在内容页中直接使用Layout属性赋值布局布文件路径。
@{
Layout = Url.Content("~/Views/Shared/_Home.cshtml");
}
这种方式对以后的修改是比较麻烦的,不推荐使用
方式二
在内容页的文件夹或父级文件夹添加_ViewStart.cshtml文件,然后在_ViewStart.cshtml文件中引用布局页(这很与aspx开发的web.config文件类似)
当不同的文件夹内的如果要使用不同的布局时,可以在相应的文件夹下新建_ViewStart.cshtml文件
当相同文件夹内的文件要使用不同布局时,只能在内容页里使用Layout属性了
使用布局页时,当此用js文件时,必须使用<script src="" type="text/javascript"></script>结尾,而不能使用<script src="" type="text/javascript" />
Razor视图引擎的基本概念与法语
Razor 视图引擎的特点:
- 简洁、富于表现、流畅
尽量减少页面代码的输入,实现快速流畅的编程工作
不必明确为服务器代码标记起始与结束符,Razor 能智能判断,这样让页面看清洁,代码方便阅读
aspx代码
1
2
3
4
5
6
7
8
9
|
<ul> <% foreach ( var str in list ){
%>
<li>
<%=str %>
</li>
<%
} %>
</ul>
|
Razor代码
<ul> @foreach (var str in list) { <li>@str</li> } </ul>
- 易于学习
对于有过WEB开发经验的人来说, 能快速学会,就几个需要注意的点
- 支持单元测试
Razor的基本语法
伟大的@标记
@标记是Razor的根本,服务器端代码段都以@开始
代码块
@{ var i = 100; var str = "Holle world!"; }
HTML编码
@输入都是经过编码的,如果不需要编码,需要使用@Html.Raw(str)
代码与纯文本混合
方式一、用<text>输出的文本内容</text>
@for (int i = 0; i < 10; i++)
{
<text>Holle world</text>
}
方式二、使用 @: 输出
@for (int i = 0; i < 10; i++)
{
@:Holle world
}
表达式与文本混合
Holle @FirstName . @LastName .
EMAIL地址
151279853@qq.com
Razor可以自动认别Email地址,而不会做服务器代码执行
输出@符号
当页面需要输出@符号时,连续两次@@ 这样输出,与C#的转义字符类似。
显示输出
当@与前面的文本之间无空间时,需要使用()号输入,如 <text> Hello@(UserName) </text>(<text>标记其实是为了让Razor把<text>当HTML标签处理,但不输出)
服务器断注释
@*
This is server side
This is server side
*@
Razor创建委托
Razor创建委托是为以复用视图逻辑
1
2
3
4
5
|
@{ Func<dynamic, object > b = @<strong>@item</strong>;
}
@b( "这样会给字体加粗!" )
|
内容中混合代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<ul> @ foreach ( var str in list)
{
<li>
@ if (isTrue)
{
@: isTrue 为 @isTrue
}
else
{
@:(isTrue 为 @isTrue)
}
</li>
}
</ul> |
多行内容混合代码
当多行内容在HTML闭合的标签中时,可以直接使用@
1
2
3
4
5
6
7
8
|
@ if (isTrue)
{ <p>
现在时间<br />
现在时间是:@DateTime.Now<br />
现在时间<br />
</p>
} |
当多行内容不在HTML闭合标签中时,需要使用行输出标记@: 或 <text></text>标记
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@ if (isTrue)
{ @:现在时间<br />
@:现在时间是:@DateTime.Now<br />
@:现在时间<br />
} @ if (isTrue)
{ <text>
现在时间<br />
现在时间是:@DateTime.Now<br />
现在时间<br />
</text>
} |
SQL Server Mobile 和 .NET 数据访问接口之间的数据类型映射
.NET 数据类型 | SQL Server Mobile 数据类型 |
---|---|
binary |
varbinary |
boolean |
bit |
byte |
tinyint |
byte[] |
varbinary |
datetime |
datetime |
decimal |
numeric |
double |
float |
guid |
uniqueidentifier |
image |
image |
int16 |
smallint |
Uint16 |
uint16 |
int32 |
int |
Uint32 |
uint32 |
int64 |
bigint |
Uint64 |
uint64 |
SqlBinary |
varbinary |
SqlBoolean |
bit |
SqlByte |
tinyint |
SqlDecimal |
numeric |
SqlDateTime |
datetime |
SqlDouble |
float |
SqlGuid |
uniqueidentifier |
SqlInt16 |
smallint |
SqlInt32 |
int |
SqlInt64 |
bigint |
SqlMoney |
money |
SqlSingle |
real |
SqlString |
nvarchar |
single |
real |
string |
nvarchar |
SQL Server Mobile 支持的 SqlDecimal 数据类型只能达到 96 位。如果超过 96 位,SQL Server Mobile 将引发溢出异常错误。
binary 和 varbinary
固定长度或可变长度的 Binary 数据类型。
binary [ ( n ) ]
-
长度为 n 字节的固定长度二进制数据,其中 n 是从 1 到 8,000 的值。存储大小为 n 字节。
varbinary [ ( n | max ) ]
-
可变长度二进制数据。n 可以取从 1 到 8,000 的值。max 指示最大的存储大小为 2^31-1 字节。存储大小为所输入数据的实际长度 + 2 个字节。所输入数据的长度可以是 0 字节。varbinary 的 SQL-2003 同义词为 binary varying。
备注
如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。如果未使用 CAST 函数指定 n,则默认长度为 30。
如果列数据项的大小一致,则使用 binary。
如果列数据项的大小差异相当大,则使用 varbinary。
当列数据条目超出 8,000 字节时,请使用 varbinary(max)。
datetime 和 smalldatetime
用于表示某天的日期和时间的数据类型。
datetime 和 smalldatetime
-
表示某天的日期和时间。
数据类型 范围 精确度 datetime
1753 年 1 月 1 日到 9999 年 12 月 31 日
3.33 毫秒
smalldatetime
1900 年 1 月 1 日到 2079 年 6 月 6 日
1 分钟
备注
Microsoft SQL Server 2005 Database Engine 用两个 4 字节的整数内部存储 datetime 数据类型的值。 第一个 4 字节存储“基础日期”(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参照日期。另外一个 4 字节存储天的时间(以午夜后经过的毫秒数表示)。
smalldatetime 数据类型存储天的日期和时间,但精确度低于 datetime。数据库引擎 将 smalldatetime 值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后经过的分钟数。
如下表所示,将 datetime 值舍入到 .000、.003、或 .007 秒的增量。
示例 | 舍入后的示例 |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995, 01/01/98 23:59:59.996, 01/01/98 23:59:59.997 或 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992, 01/01/98 23:59:59.993 或 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 或 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
将等于或小于 29.998 秒的 smalldatetime 值向下舍入到最接近的分钟数;将等于或大于 29.999 秒的值向上舍入到最接近的分钟数。
复制代码 | |
---|---|
--Returns time as 12:35. SELECT CAST('2003-05-08 12:35:29.998' AS smalldatetime); GO --Returns time as 12:36. SELECT CAST('2003-05-08 12:35:29.999' AS smalldatetime); GO |
float 和 real
用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。
注意: |
---|
real 的 SQL-92 同义词为 float(24)。 |
数据类型 | 范围 | 存储 |
---|---|---|
float |
-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308 |
取决于 n 的值 |
real |
-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38 |
4 字节 |
语法
- float [ ( n ) ]
-
其中 n 为用于存储 float 数值尾数的位数,以科学记数法表示,因此可以确定精度和存储大小。如果指定了 n,则它必须是介于 1 和 53 之间的某个值。n 的默认值为 53。
n value 精度 存储大小 1-24
7 位数
4 字节
25-53
15 位数
8 字节
注意: |
---|
SQL Server 2005 将 n 视为下列两个可能值之一。如果 1<=n<=24,则将 n 视为 24。如果 25<=n<=53,则将 n 视为 53。 |
SQL Server float[(n)] 数据类型从 1 到 53 之间的所有 n 值均符合 SQL-92 标准。double precision 的同义词为 float(53)。