2016-01-14 1 views
3

Я использую ASP.NET MVC 5 и Visual Studio Express 2013. У меня есть этот небольшой формы в C# проекта:@ Html.BeginForm синтаксис Visual Basic

<body> 
    @using (Html.BeginForm()) 
    { 
     <p>Your name: @Html.TextBoxFor(x => x.Name) </p> 
     <p>Your email: @Html.TextBoxFor(x => x.Email) </p> 
     <p>Your phone: @Html.TextBoxFor(x => x.Phone) </p> 
    } 
</body> 

Я попытался перевести код, приведенный выше в VB.NET, как показано ниже:

<body> 
    @Using Html.BeginForm() 
     <p>Your name: @Html.TextBoxFor(Function(m), m.Name)</p> 
     <p>Your email: @Html.TextBoxFor(Function(m), m.Email)</p> 
     <p>Your phone: @Html.TextBoxFor(Function(m), m.phone)</p> 
    End Using 
</body> 

У меня есть синие линии под «Your» в каждом элементе «P». Помощник подсказки, когда я нависаю над синей линией, - «Спецификатор атрибута - не полный оператор. Используйте продолжение строки, чтобы применить атрибут к следующему выражению. '.

При отладке страницы ошибка: «BC30201: Ожидаемое выражение». на линии, где происходит @Using.

Что я делаю неправильно?

+0

P.S. Код C# работает так, как ожидалось. –

+0

- это '@ Using', за которым следует' @ Html.BeginForm() 'опечатка? Вам может не понадобиться два @ на этой строке – rogerdeuce

+0

Это не была опечатка. Я попытался вставить дополнительные @ в разных местах, чтобы увидеть, могу ли я правильно получить синтаксис. Я забыл удалить это, когда я написал сообщение. Я подтвердил, что его нет в моем коде VB, заново запустил страницу, и у меня все еще возникают проблемы. Сообщение об ошибке смещается из строки с @Using в следующую строку (первое текстовое поле), а сообщение: BC32035: Спецификатор атрибута не является полным оператором. Используйте продолжение строки, чтобы применить атрибут к следующему выражению. –

ответ

5

Как предположил @rogerdeuce, вам не нужен второй символ @.

@ используется для переключения контекста из кода VB в HTML/текст.

Так правильный код будет выглядеть следующим образом:

<body> 
    @Using Html.BeginForm() 
     @<p>Your name: @Html.TextBoxFor(Function(m) m.Name)</p> 
     @<p>Your email: @Html.TextBoxFor(Function(m) m.Email)</p> 
     @<p>Your phone: @Html.TextBoxFor(Function(m) m.phone)</p> 
    End Using 
</body> 

Или вы могли бы использовать @<text> ярлык:

<body> 
    @Using Html.BeginForm() 
     @<text> 
     <p>Your name: @Html.TextBoxFor(Function(m) m.Name)</p> 
     <p>Your email: @Html.TextBoxFor(Function(m) m.Email)</p> 
     <p>Your phone: @Html.TextBoxFor(Function(m) m.phone)</p> 
     </text> 
    End Using 
</body> 
+0

Обратите внимание, что я переименовал вашу переменную выражения из 'model' в' m', чтобы избежать конфликтов имен со встроенной переменной 'Model'. –

+0

Спасибо. Я попробовал оба примера выше. Когда я меняю код на моей странице на один из них, у меня есть синяя линия под запятой в выражении лямбда и под «m» в m.Name. Синяя линия под запятой зависает как «Ожидаемое выражение», а синяя линия под «m» зависает как «m», не объявляется, она может быть недоступна из-за уровня защиты ». Когда я отлаживаю страницу, она прерывается сообщением «BC30201: ожидаемое выражение». –

+0

Упс. Исправлено это. В лямбда-выражениях нет запятой. –