2016-06-15 6 views
0

Мне было интересно, какая разница между двумя следующими способами добавления объекта HtmlAttributes в ASP.NET MVC 5. Я использую помощник RadioButtonFor html в цикле foreach, и у меня были проблемы установив атрибут name для переключателей, чтобы я мог правильно их группировать. Я работаю сейчас, но я не понимаю, почему решение, которое я нашел (решение найдено здесь: MVC RadioButtonFor group) работает, и почему мой нет.ASP.NET MVC Объект Razor HtmlAttributes

Неработающий метод:

<td>@Html.RadioButtonFor(m => item.PollRating, 1, new { @name = Html.DisplayFor(m => item.TickerSymbol) }) Below </td> 

метод работы:

<td>@Html.RadioButtonFor(m => item.PollRating, 2, new { Name = Html.DisplayFor(m => item.TickerSymbol) }) Flat </td> 

Разница используется @name против имени для объекта htmlAttributes. Всякий раз, когда мне приходилось назначать класс или id при использовании html-помощников, я использовал нотацию @class или @id, но в этом случае для имени не работает. Когда я парить над @name и Имя в Visual Studio я вижу тот же всплывающее сообщение, которое гласит:

« 'a.Name {получить;}

Анонимные типы:

' MvcHtmlString а является новым {MvcHtmlString Name} "

Я использую Visual Studio 2015, цель .NET Framework - 4.5.2, а версия MVC - 5.2.3.0.

+0

Потому что, как переопределить name' атрибут '(см [здесь] (http://stackoverflow.com/questions/6057865/asp-net-mvc-3-override-name-attribute-with-textboxfor) и [здесь] (http://stackoverflow.com/questions/23912263/how-to-override-the-name-ht mlattribute-оф-бритва)). В других случаях «@ class» избегает ключевого слова «class» класса C#. '@' не требуется для '@ id', просто используйте' id'. – Jasen

+0

Спасибо за разъяснение этого для меня. – FittyFrank

+0

Никогда не пытайтесь переопределить атрибут 'name' при использовании методов' HtmlHelper', если вы не хотите, чтобы ваше приложение терпило неудачу. Ваша реализация не имеет смысла и не будет правильно привязываться ко всему. И если вы делаете это в цикле, тогда его 'for (int i = 0; i m [i] .TickerSymbol, 1) @ Html.RadioButtonFor (m => m [i] .TickerSymbol, 2)} ' –

ответ

-1

Когда вы используете @ in htm, это означает, что это код или элемент кода C#, а @ в C# - это специальное имя varib, когда имя такое же, как и системный comand (@ class, @interface, @int и другие)

@// line of c# code 
    @{ 
    //c# code body 
    } 

Также попробуйте использовать кнопку таким образом

<td>@Html.RadioButtonFor(m => item.PollRating, 2, new { Name=item.TickerSymbol }) Flat </td> 
+0

Спасибо за помощь. Использование Name = item.TickerSymbol намного чище, чем мой предыдущий код, и отлично работает. – FittyFrank

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