2014-12-30 2 views
3

Тот же вопрос отсюда.TagBuilder добавить атрибут без значения

How to add attribute without value

На этот раз, я хочу, чтобы создать вход с атрибутом AngularJS, чтобы использовать его в качестве директивы.

Вот что я хочу:

<input ng-angular-abc /> 

Это то, что TagBuilder генерироваться:

<input ng-angular-abc=""/> 

Я попытался это, но никто не работает:

tagBuilder.MergeAttribute("ng-angular-abc", ""); 
tagBuilder.MergeAttribute("ng-angular-abc", null); 
tagBuilder.MergeAttribute("ng-angular-abc", "ng-angular-abc"); 
+1

'ng-angular-abc =" "и' ng-angle-abc' - то же самое. Нет никаких проблем с anuglar при использовании пустого значения. Некоторое время я использую угловое отношение и не испытывал никакой разницы. –

+0

В моей директиве я проверяю attrs и вижу, определено ли значение или нет. Если ng-angular-abc, значение не определено, а ng-angular-abc = "", значение пустое, и оно работает неправильно. –

+0

Кажется, проблема связана с вашей директивой ... Я бы исправил это, вместо того, чтобы пытаться изменить MVC (что делает это, потому что все эти вещи эквивалентны). Если вы действительно настроены, вы можете наследовать от TagBuilder и переопределить 'MergeAttribute'. – Casey

ответ

1

Это не именно то, что вам нужно, но вы можете создать вспомогательный метод для генерации тегов -

namespace YourNamespace 
{ 
    public static class CustomHelpers 
    { 
     public static MvcHtmlString TextboxWithProperty(this HtmlHelper html, string property) 
     { 
      StringBuilder result = new StringBuilder(); 
      result.AppendFormat("<input {0} />", property); 
      return MvcHtmlString.Create(result.ToString()); 
     } 
    } 
} 

и назовите его по вашему мнению, -

@using YourNamespace 
... 
... 
... 
@Html.TextboxWithProperty("ng-angular-abc") 
+0

Не совсем то, что я хочу, создать помощника - это слишком много работы. Я просто хочу повторно использовать или настроить существующий конструктор тегов. –

+0

'HtmlTextWriter', похоже, тоже не имеет этой опции. – th1rdey3

1

Альтернативный подход заключается в использовании Razor хелперы создание файла Helpers.cshtml в вас App_Code каталога. Ваш помощник хотел бы это

@helper InputNg() { 
    <input ng-angular-abc /> 
} 

Чтобы получить доступ к помощникам в представлении бритвы просто использовать имя файла с последующим способом, как показано ниже:

@Helpers.InputNg() 

Это дает намного лучший контроль над HTML.

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