ASP.NET MVC中的Razor語法


1.Razor的基本語法

@* 多行代碼時需要包含在大括號內{}和每句代碼后都需要加分號; *@
@{
    ViewBag.Title = "Index";
    ViewBag.Name = "Linq";
    ViewBag.IsOk = false;
    List<string> list = new List<string>() { "11", "22", "33", "44", "55", "66" };
    ViewBag.Description = "<span style='font-weight: bold;'>迷失之牙</span>";
}
@* 單行代碼時不需要分號結束 *@
<p>@DateTime.Now</p>

<p>
    名稱:@("歡迎," + ViewBag.Name)
    狀態:@(ViewBag.IsOk ? "是" : "否")
    @@Linq
</p>

@if (ViewBag.IsOk != null && ViewBag.IsOk)
{
    @:啟用
}
else
{
    @:停用
}

@if (ViewBag.IsOk != null && ViewBag.IsOk)
{
    <span>1.啟用</span>
}
else
{
    <span>2.停用</span>
}

@if (ViewBag.IsOk != null && ViewBag.IsOk)
{
    <text>
    1234567
    <span>1. 啟用</span>
    </text>
}
else
{
    <text>
    1234567
    <span>2. 停用</span>
    </text>
}

<ul>
    @foreach (var item in list)
    {
        <li>@item</li>
    }
</ul>
@* 所有Razor語法輸出的變量都會被HTML編碼(HTMLEncode)后輸出,如果想里面的HTML標簽生效要調用Html.Raw方法 *@
@ViewBag.Description
@Html.Raw(ViewBag.Description)

@{
    <h2>混合例子 @(ViewBag.Name)</h2>
    foreach (var item in list)
    {
        <li>@item</li>
    }
    
}

 

2.Razor的主板頁面框架

2.1 Razor頁面執行順序
Controller回傳給ViewResult給MvcHandler之后,MvcHandler會先設法找出對應的檢視頁面,然后Razor頁面執行生命周期
被MvcHandler找到Razor頁面會優先執行,然后檢查這個View頁面是否有Layout屬性


2.2 關於_ViewStart
2.2.1/View/_ViewStart.cshtml文件會在/View/目錄下任何View被截入前就先被截入,任何與Controller同名的View子目錄下也能出現相同的_ViewStart.cshtml如此一來就可以不同的Controller對應不同的_ViewStart.cshtml


2.3 _Layout布局頁面
2.3.1 _Layout.cshtml和一般的Razor的檢視頁面差不多,不同的地方是有2個Razor語法,分別是@RenderBody(預設坑洞)與@RenderSection(具名坑洞)

3.@helper輔助方法 

Razor提供了一種很方便的語法,讓你可以將View頁面中部分內容或部分代碼抽取出來,變成一個獨立的輔助方法

<p>@ShowTime() </p>
@helper ShowTime()
{
    @DateTime.Now;
}

 

4.@functions自定義函數

在@helper無法自定義屬性,自能單純地傳入參數,然后格式化你想要呈現的樣子直接輸出。所以Razor還提供@functions自定義函數功能

<p>@ShowTime() </p>
@functions{
public IHtmlString ShowTime()
{
    return  new HtmlString(DateTime.Now.ToString());
}
}

 

5.@using引用參考資料類別

在Razor頁面里面可以在頁面最上方通過@using引用這一個View頁面里面會用到的命名空間

@using MvcApplication1.Models

 

    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
      <namespaces>
        <!--也可以配置在配置文件里面-->
        <add namespace="MvcApplication1.Models"/>
      </namespaces>
    </pages>

 

6.@model引用參考資料型別

        public ActionResult Index()
        {
            List<User> list = new List<User>();
            list.Add(new User() { Name="11",Age=11});
            list.Add(new User() { Name = "12", Age = 12 });
            list.Add(new User() { Name = "13", Age = 13 });
            return View(list);
        }
@using MvcApplication1.Models

@{
    var data = (IEnumerable<User>)Model;
}
<ul>
    @foreach (var item in data)
    {
        <li>@item.Name</li>
    }
</ul>

 

@using MvcApplication1.Models
@model IEnumerable<User>
<ul>
    @foreach (var item in Model)
    {
        <li>@item.Name</li>
    }
</ul>

 7.布局頁

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div id="header">
        @if (IsSectionDefined("header"))
        {
            @RenderSection("header", false)
        }
        else
        {
            <h1>沒有填充@RenderSection("header", false)</h1>
        }
    </div>
    <div>
        @Html.Partial("_LayoutUser")
    </div>
    <div>
        @RenderBody()
    </div>
    <div id="footer">
        @RenderSection("footer",false)
    </div>

</body>
</html>

 

@{
    ViewBag.Title = "About";
    Layout = "~/Views/Shared/_LayoutTest.cshtml";
}

<h1>我是@RenderBody()</h1>

@section footer {
    <h1>我是@RenderSection("footer",false)</h1>
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM