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)。