Как @ используется в MVC Razor и когда это требуется?

Я довольно новичок в MVC 3, но я столкнулся с довольно любопытной проблемой. Я использую синтаксис Razor, и, согласно VS, мне не нужно префикс @ для операторов, если им сразу предшествует другой оператор @ или один раз внутри код, префикс @ больше не требуется.

Итак, вот мой код в моем представлении:

    @using (Html.BeginForm("StudentSelect", "Home", FormMethod.Post, new { id = "sSelect" }))  {

        Html.HiddenFor(m => m.SelectedStudent);
        foreach (Classes.CStudent item in Model.Students)
        {
            <div class="studentSelect">
                <div class="studentname">@item.StudentName</div>
                <div>@item.Address</div>
            </div>   
        }
    }

Take not that the Html.HiddenFor and foreach lines do not have @ prefix. The generated HTML should produce a <form> followed by a <input type="hidden"> field. However, upon checking the HTML on the generated page, the hidden input field is missing.

<form action="/Home/StudentSelect" id="sSelect" method="post">                
   <div class="studentSelect">
        <div class="studentname">Name1</div>
        <div>AAA</div>
   </div>   
   <div class="studentSelect">
        <div class="studentname">Name2</div>
        <div>Address1</div>
   </div>   
</form>

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

Кстати, этот код компилируется правильно. Однако, если я префикс @ перед Html.HiddenFor , мой код не компилируется, а Visual Studio выдает ошибку.

1
nl ja de
Можете ли вы предоставить ошибку компиляции? Представления обычно не компилируются.
добавлено автор Paul Fleming, источник

1 ответы

@ выполняет две цели. Один для запуска «режима кода» и один для сокращения Response.Write .

Экземпляр @ , предшествующий с помощью , запускает «режим кода». Экземпляр @ предшествует item.Address эквивалентен Response.Write (item.Address); . Вы все еще требуете его для Html.HiddenFor , так как это возвращает вывод MvcHtmlString , который должен быть записан в поток ответов.

Эта строка:

Html.HiddenFor(m => m.SelectedStudent);

должно быть:

@Html.HiddenFor(m => m.SelectedStudent)

Обратите внимание, что ; больше не требуется.

2
добавлено
Однако мой код не компилируется, если я помещаю префикс @ . VS создает ошибку
добавлено автор Devmonster, источник
Нет, у меня было VS, чтобы проверить код при компиляции. Я добавил в файл проекта true
добавлено автор Devmonster, источник
Но это отвечает на мой вопрос. Благодаря! Я не могу принять это до тех пор, пока
добавлено автор Devmonster, источник
Теперь он работает, у меня также был @for , но теперь я удалил префикс. Ошибка VS была выбрана Неожиданное ключевое слово "foreach" после символа "@". Как только внутри кода вам не нужны префиксные конструкции, такие как «foreach» с «@».
добавлено автор Devmonster, источник
Представления обычно не компилируются. Вы создаете скомпилированные представления с помощью такого инструмента, как RazorGenerator?
добавлено автор Paul Fleming, источник
Поднимите ошибку компиляции как новый вопрос, и я посмотрю.
добавлено автор Paul Fleming, источник
@Devmonster Ах нормально. Рад, что у вас это работает :)
добавлено автор Paul Fleming, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)