刚接触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")[email protected]';" 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("****") %>