您的位置:首页 > 编程语言 > ASP

Asp.net MVC 3 Razor视图引擎的使用(一)

2011-07-18 12:07 746 查看
    刚接触mvc3的人对于Razor的语法必然有些陌生,以至于在开发时,遇到一些小小的阻碍,在此,我整理了一些常用的Razor语法,便于查阅。
    『视图展示数据的一些语法』
    1. 遍历ViewData中的数据,生成数据表格:
@if (ViewData["PageData"] != null)
{
List<OrgScoreWorkEn> list = ViewData["PageData"] as List<OrgScoreWorkEn>;
if (list != null && list.Count > 0)
{
foreach (OrgScoreWorkEn oen in list)
{
<tr class="toptd" onmouseover="this.className='topovertd';" onmouseout="this.className='toptd';">
<td>
<ul>
<li>@oen.fOrgName</li>
<li>@oen.fWorkTaskCode</li>
</ul>
</td>
<td>
<ul>
<li>@oen.fBeginDate.ToString("yyyy-MM-dd")至@(oen.fEndDate.ToString("yyyy-MM-dd"))</li>
<li><a href="#" onclick="window.location.href='#';">
@oen.fScoreTaskHTML
</a>
</li>
</ul>
</td>
<td>
@oen.fModifyDate.Value.ToString("yyyy-MM-dd")
</td>
<td>
<ul>
<li>
<img onclick="window.location.href='@Url.Action("ScoreWorkEdit", "ScoreWork")?fWorkId=@oen.fWorkId';" src="@Url.Content("~/Content/images/editic.gif")" alt="编辑机构任务" style="cursor:pointer;" />
<img onclick="if(confirm('确定删除机构任务?')){ DeleteOrgWork('@Url.Action("ScoreWorkDelete", "ScoreWork")', '@oen.fWorkId');}" src="@Url.Content("~/Content/images/icon_delete.png")" alt="删除机构任务" style="cursor:pointer;" />
</li>
<li>
<img onclick="window.location.href='#';" src="@Url.Content("~/Content/images/icon_zoom.png")" alt="查看" style="cursor:pointer;" />
<img onclick="window.location.href='#';" src="@Url.Content("~/Content/images/icon_child.png")" alt="新增下级任务" style="cursor:pointer;" />
</li>
</ul>
</td>
</tr>
}
}
}    从上面的例子中,可以看出Razor视图的优点,换作在mvc2或者webform中,我们必然少不少使用<%%>括住c#代码的块,而html标签必然放在<%%>块之外,但是使用Razor的语法,我们可以清晰看出程序块的层次关系。
    另外@Url.Content是个非常体贴的方法,相信很多人在使用相对路径时,遇到过"../../"这种烦恼,而Url.Content则可以避免这个问题,只需指定文件的绝对路径,它便可为其生成相对路径,另外,它的作用可不仅仅限于指定文件的相对路径,它还可以这样用:
    @Html.Hidden("url", @Url.Content("~/View/Content/images/"))
    你可以将一个文件夹的相对路径存在隐藏域中,这样,便可以解决在单独的js文件中,无法使用Razor语法的情况
    另外一个需要注意的地方:“@oen.fBeginDate.ToString("yyyy-MM-dd")至@(oen.fEndDate.ToString("yyyy-MM-dd"))”,@()相当于<%= %>或<%: %>的作用:如果不加“()”,“@变量名”中的@符号紧跟在汉字或者其他字符后面,而没有跟在html标签后,它会被识别为普通的@字符,而不算Razor的语法块,除非你使用回车另取一行,让@变量名前没有其他字符,这种情况,使用@(变量名或表达式)可以解决问题。
    2. 其他语法
    @* *,注释的语法
    @using,引用包语法,相当于<%@ Import Namespace="***" %>,例如:@using System.Data;
    @{ },c#代码块标记,相当于<% %>
    @Model,指定视图的模型,相当于mvc2中,“<%@ Page Title="服务报名结束确认|托业" MasterPageFile="~/Views/Shared/OLMasterPage.Master" Language="C#"
    Inherits="System.Web.Mvc.ViewPage<dynamic>" %>”红色字体的定义。
    @selection,指定一个节的定义,例如:@selection header{ <script src="@Url.Content("~/Content/js/ScoreWork.js")" type="text/javascript"></script> }
        @selection content{

            @*body的内容*

         } 
    @@,转义,连续两个@,表示普通字符“@”
    方法调用跟mvc2没有太大的区别:@Html.Partial("***")与<%: Html.Partial("****") %>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息