MVC view操作(Razor語法)


 Razor,很有意思的剃刀。相較與之前開發WEB的方式,Razor真是輕松愜意。

下面說一下我使用Razor的一些心得。

    頁面中歸根結底是一個輸出字符串(HTML CSS JS等混合的字符串)的過程。現在流行的Web開發方式,包括Asp(.net), Jsp, Php 等等,在頁面上,都是在輸出HTML字符串的過程中,嵌入服務器代碼。或者理解成相反的過程, 不管如何理解, 頁面中總是需要在輸出字符串和其它服務端代碼兩者中間不斷的進行切換。

傳統的切換是通過<%%>之類的成對標記標識的。 Razor引擎不再使用之么復雜的標記, 而是使用一個@來標識這種切換。

    我們暫時將直接輸出HTML CSS JS等字符串的模式稱為HTML模式,將執行服務器代碼的模式稱為C#模式,請看下圖:      mx37C71

從HTML模式進入C#的模式,總是以@開始, 后面沒有跟{}時,Razor會自動判斷何時返回Html模式。沒有{}的C#模式一般都比較短暫,碰到HTML標記就結束了。

而有{}時,大括號之中會進入以c#為默認模式的環境中。比如:

mx38FE1

這段代碼在瀏覽器中的結果:

mx3D386

上面的代碼,注釋中說明了兩種模式切換的情況,同時展示了是否進行HTML編碼輸出字符串的功能。

Razor的精髓便是默認模式模式的切換 。 在輸出有困難的時候,可以通過{}和一些系統提供的或自定義的C#方法來明確的控制這種切換。

除了這一切換原理,Razor還有些小的特性,比如

1) @if必須有{}

2)在JS或CSS中使用@與稍有困難

3)<a>標記中的href屬性,使用”~/”,Razor會自動將其轉換成絕對路徑

4) 很多情況下,初學者會錯誤的多輸出;符號。比如將 @Html.Raw(“…”) 寫成 @Html.Raw(“…”);  后面的;是多余的,會錯誤的呈現在頁面上。

還有一些其它的,在使用中慢慢體會吧。

像HtmlHelper(即@Html)、URLHelper(@Url)等其中 有很多常用的方法。

比如Url.Content(“~/Controller/Action…”)會轉換成絕對路徑。

雖然看上去有點復雜,但是稍加熟悉后感覺真是比原來的<%%>輕松多了。

所以,我們愛Razor.

    在js方法中使用@,js代碼與C#區域 。以<text><text/>包裹js區域,可參考下面:

<script type="text/javascript">
    $(function () {
        
        @if(Request["tag"].ToString()=="1")
        {
            string FlowID = Request["flow_id"].ToString();
            <text>
            //var FlowID = $("#FlowID").val();
            @if (FlowID.Equals("1")) {
                <text>
                location.href = "../Task/HandleNode?id=@this.Model.ID";
               </text>
            }
            else if (FlowID.Equals("2"))
            {
                 <text>
                location.href = "../Merchant/Audit?id=@this.Model.ID";
        </text>
            }
            else if (FlowID.Equals("3"))
            {
                 <text>
                location.href = "../NodeGrade/NodeGrade?id=@this.Model.ID";
        </text>
            }
            </text>
        }
        else if (Request["tag"].ToString() == "2")
        {
            <text>
            location.href = "../TalksCommi/Details?id=@this.Model.ID";
            </text>
        }
        else if (Request["tag"].ToString() == "3")
        {
            <text>
        location.href = "../NodeGrade/NodeGradeAudit?id=@this.Model.ID";
            </text>
        }
    });

</script>

 

   引入BundleConfig中定義的js或css
    @Scripts.Render("~/bundles/jqueryval")
    @Styles.Render("~/Content/css")

 


免責聲明!

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



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