2014-12-28 27 views
3

在MVC5中,@model,@html@using是什麼意思,爲什麼當我們通常使用(@)以及哪個詞跟隨它?MVC @model含義

例如:@model MVC_Project2.Models.stufftable是寫在第一頁re.cshtml的 stufftable中的表是屬於用戶創建新的用戶和下面的代碼寫在同一頁面中創建兩個文本框有兩個標籤2標籤以顯示登錄頁面:

@using (Html.BeginForm()) 
{ 
    <div> 
     @Html.LabelFor(u => u.stuffname) 
     @Html.TextBoxFor(u => u.stuffname) 
    </div> 
    <div> 
     @Html.LabelFor(u => u.stuffpass) 
     @Html.PasswordFor(u => u.stuffpass) 
    </div> 
    <input type="submit" /> 
} 
+1

這只是剃刀的語法。 –

+2

請參閱http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-%28c%29 –

+0

爲什麼這個問題有3票?這個問題甚至不是有效的。你在一個問幾個問題。 – ataravati

回答

0

@用於Razor代碼中的指令。例如,@model將視圖綁定到模型。 @也用於執行和打印HTML中的後端C#代碼。當你使用@Html時,它調用一個輔助類,它是Mvc框架的一部分,它返回一個MvcHtmlString

0

清潔和簡單:@是剃刀語法。它可以幫助您將C#代碼插入您的視圖(HTML代碼)。
例如:

@DateTime.Now 

會告訴你當前的日期和時間。

7

在.cshtml文件中,其中的所有內容都是HTML。所以它會寫出完全按照其書面。

換句話說,如果你剛剛輸入

model blah 

沒有@然後當你渲染視圖,這實際上顯示的話在頁面上model blah

@ sign是一個告訴Razor引擎的指令,後面是代碼,它應該編譯,而不是簡單地將它寫入輸出。

所以,當你鍵入

@model blah 

這是由剃刀編譯,並告訴剃刀引擎,該模型的類型是「胡說」,這樣,當你使用關鍵字Model(注意是大寫M並且您也必須使用@符號),它將引用您已定義的模型(在此例中爲blah)。

所以,如果你寫

@model blah 

@Model.Foo 

然後,如果blah.Foo包含的14號,它會寫14號到輸出。正如你可能猜測的那樣,@符號有很多用途,所以如果你說@Model.Foo你實際上在做類似Response.Write(Model.Foo)的事情。

一般來說,@符號被用來從HTML模式轉型,代碼模式,在老ASPX代碼肉塊用<% ... %>以同樣的方式,但是剃鬚刀是有點小聰明,理解你的代碼的情況下,因此可以推斷出您的代碼在大部分時間結束的位置,因此不需要像過去那樣有末端括號。

@using就像在C#代碼中一樣,它是在塊結束後處置可用資源的using語句。 Razor在很多情況下使用這種技術來表示代碼塊的結束。所以,舉例說:

@using(Html.BeginForm()) { 
.... 
} 

Html.BeginForm助手在這種情況下返回一個對象,它定義了一個IDisposable接口,當使用語句結束時調用,所以BeginForm()輸出<form>標籤,當IDisposable.Dispose()方法在使用語句結束時調用,它輸出</form>。這是一種技術,用於包裝其他輸出標籤的代碼,以便它可以正確關閉它們的html。

@Html也只是C#。然而,它調用HtmlHelper對象(Razor在支持視圖的「ViewPage」類中定義了一個名爲Html的對象,此Html對象類型爲HtmlHelper),它調用已在HtmlHelper對象上定義的各種C#擴展方法。如果你不知道C#擴展方法是什麼,那麼這是擴展對象而不必重寫這些對象的一種方法,這是更高級的C#。可以這麼說,像@Html.TextBox()這樣的東西調用HtmlHelper.TextBox()類型的方法,所以它只是一個可以調用的C#方法,但是這些方法是作爲助手創建的,可以幫助您創建HTML。

真的有很多,如果你不理解我所討論的概念,那麼你真的需要了解更多關於C#和/或HTML的知識,因爲你可能會陷入困境。

+0

多麼簡潔的解釋。你值得投票:) – agentpx