剛接觸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" οnmοuseοver="this.className='topovertd';" οnmοuseοut="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="#" οnclick="window.location.href='#';">
@oen.fScoreTaskHTML
</a>
</li>
</ul>
</td>
<td>
@oen.fModifyDate.Value.ToString("yyyy-MM-dd")
</td>
<td>
<ul>
<li>
<img οnclick="window.location.href='@Url.Action("ScoreWorkEdit", "ScoreWork")[email protected]';" src="@Url.Content("~/Content/images/editic.gif")" alt="編輯機構任務" style="cursor:pointer;" />
<img οnclick="if(confirm('確定刪除機構任務?')){ DeleteOrgWork('@Url.Action("ScoreWorkDelete", "ScoreWork")', '@oen.fWorkId');}" src="@Url.Content("~/Content/images/icon_delete.png")" alt="刪除機構任務" style="cursor:pointer;" />
</li>
<li>
<img οnclick="window.location.href='#';" src="@Url.Content("~/Content/images/icon_zoom.png")" alt="查看" style="cursor:pointer;" />
<img οnclick="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("****") %>