2015-06-03 4 views
3

Я в настоящее время обучение ASP.NET MVC, и я представлены в следующем фрагменте кода:ASP.NET MVC Razor HtmlHelper Синтаксис

@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "First name"}) 

Я понимаю, что лямбда-выражение относится к модели как м, но что является вторым аргументом? Кажется, это анонимный тип, но мой главный вопрос - почему есть символ @ перед заполнителем?

+0

Второй аргумент - это объект для передачи дополнительных атрибутов HTML. В этом случае вы хотите добавить атрибут 'placeholder' HTML к вводу. Значок @ необходим, если вы используете зарезервированное слово (ключевое слово). В противном случае вы получите ошибку компиляции. Хотя «placeholder» не является ключевым словом, поэтому в этом случае он не нужен. – Styxxy

ответ

1

Синтаксис @placeholder указывает движку бритвы, что вы хотите присвоить значение атрибуту html для элемента, который будет отображаться помощником. Таким образом, если вам необходимо установить класс в текстовом поле, а также, ваш анонимный тип меняется на:

new { @placeholder = "First name", @class = "BoldText" } 

А почему вы используете @, то @ позволяет использовать зарезервированные ключевые слова в качестве имен переменных. Если вы пытались использовать

class = "BoldText" 

вы получите ошибку во время выполнения с вашей точки зрения, так как class является зарезервированным ключевым словом в C#. Предварительная обработка @ гарантирует, что это не произойдет и считается «лучшей практикой». @ потребуется только до class, а не placeholder.

+0

Да, но почему @? –

+0

@Nicolas: Знак @ необходим, если вы используете зарезервированное слово (ключевое слово). В противном случае вы получите ошибку компиляции. Хотя «placeholder» не является ключевым словом, поэтому в этом случае он не нужен. – Styxxy

+0

@Styxxy в этом случае вы получите исключение во время выполнения, а не ошибку компиляции, поскольку это находится в режиме бритвы. –

5

Второй аргумент - 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!):

@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#. Символ @ требуется только для этих зарезервированных слов.

1

Второй параметр ожидает анонимного объекта для htmlAttributes, который вы хотели бы указать на своем входе.

Вы используете символ @, чтобы сообщить движку бритвы, что вы указываете htmlAttribute, а не зарезервированное ключевое слово.

Смежные вопросы