[英]ASP.NET MVC HtmlHelper Razor Syntax
我目前正在學習ASP.NET MVC,並提供以下代碼片段:
@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "First name"})
我理解lambda表達式將模型稱為m ,但第二個參數是什么? 它似乎是一個匿名類型,但我的主要問題是為什么占位符前面有一個@字符?
第二個參數是htmlAttributes
,您可以使用它來向幫助程序生成的HTML添加其他屬性(@ Html.TextBoxFor是一個HTML幫助程序)。
為您的示例生成的代碼將沿着以下行:
@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "First name"})
<input type="text" name="FirstName" placeholder="First name" />
如果需要,您可以添加更多屬性,它們也將添加到生成的標記中:
@Html.TextBoxFor(m => m.FirstName, new { placeholder = "First name", @class="my_text_box_class" })
<input type="text" name="FirstName" placeholder="First name" class="my_text_box_class" />
也可以使用Value
(大寫V!)來覆蓋文本框的Value
:
@Html.TextBoxFor(m => m.FirstName, new { placeholder = "First name", Value="John Johnson"})
<input type="text" name="FirstName" placeholder="First name" value="John Johnson" />
@符號的原因是當您想要一個名為C# 保留字的屬性時。 class,private,namespace等。這是一種讓C#編譯器停止解釋它的方法,因為它是C#的含義。 只有這些保留字才需要@符號。
@placeholder
語法告訴剃刀引擎您要為將由助手呈現的元素上的html屬性賦值。 因此,如果您還需要將類設置為文本框,則您的匿名類型將更改為:
new { @placeholder = "First name", @class = "BoldText" }
至於為何使用@
, @
允許您使用保留關鍵字作為變量名。 如果你試圖使用
class = "BoldText"
您將在視圖中收到運行時錯誤,因為class
是C#中的保留關鍵字。 前置@
確保不會發生這種情況,並被視為“最佳做法”。 @
只在class
前需要,而不是placeholder
。
第二個參數需要您希望在輸入中指定的htmlAttributes
的匿名對象。
您使用@
符號告訴剃刀引擎您正在指定htmlAttribute
而不是保留關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.