目前我正在学习ASP.NET MVC和我看到下面的代码片段:ASP.NET MVC的HtmlHelper剃刀语法
@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "First name"})
据我所知,lambda表达式是指模型米,但第二个参数是什么?它似乎是一个匿名类型,但我的主要问题是为什么在占位符前面会出现一个字符@?
目前我正在学习ASP.NET MVC和我看到下面的代码片段:ASP.NET MVC的HtmlHelper剃刀语法
@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "First name"})
据我所知,lambda表达式是指模型米,但第二个参数是什么?它似乎是一个匿名类型,但我的主要问题是为什么在占位符前面会出现一个字符@?
@placeholder
语法告诉剃须刀引擎,您要为要由助手呈现的元素的html属性赋值。因此,如果你需要设置一个类的文本框为好,你的匿名类型将改变为:
new { @placeholder = "First name", @class = "BoldText" }
至于为什么你用@
,将@
允许您使用保留的关键字作为变量名。如果你试图用
class = "BoldText"
您会收到运行时错误在你看来,因为class
是C#中的保留关键字。预备版@
确保不会发生这种情况,并被视为“最佳做法”。 @
只会在class
之前,而不是placeholder
。
是的,但为什么@? –
@Nicolas:如果您使用保留字(关键字),则需要@符号。否则,你会得到一个编译错误。虽然“占位符”不是关键字,但在这种情况下不需要。 – Styxxy
@Styxxy在这种情况下,你会收到一个运行时异常,而不是编译错误,因为这是一个剃须刀视图。 –
第二个参数是htmlAttributes
,您可以使用它将附加属性添加到由助手生成的HTML中(@ Html.TextBoxFor是一个HTML助手)。
为您的示例生成的代码将是沿着线:
@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "First name"})
<input type="text" name="FirstName" placeholder="First name" />
如果你愿意,你可以添加更多的属性,而且它们也将被添加到生成的标签:
它也可以覆盖使用Value
文本框的值(上下的V!):
@Html.TextBoxFor(m => m.FirstName, new { placeholder = "First name", Value="John Johnson"})
<input type="text" name="FirstName" placeholder="First name" value="John Johnson" />
@符号的原因适用于您想要一个完全按照C#reserved word命名的属性。类,私有,命名空间等。这是一种使C#编译器停止解释它的方式,因为它是C#的意思。 @符号仅用于这些保留字。
第二个参数需要您希望在输入中指定的htmlAttributes
的匿名对象。
您使用@
符号告诉剃须刀引擎您指定的是htmlAttribute
而不是保留关键字。
第二个参数是传递其他HTML属性的对象。在这种情况下,您希望将'placeholder' HTML属性添加到输入中。如果您使用保留字(关键字),则需要@符号。否则,你会得到一个编译错误。虽然“占位符”不是关键字,但在这种情况下不需要。 – Styxxy