2015-11-11 7 views
5

Я искал примеры на taghelpers в google, но не смог найти какой-либо пример, который я ищу.Как написать собственный тег-тег ASP.NET 5, который содержит другие теги-лидеры

У меня есть следующий код:

<div class="form-group"> 
    <label asp-for="PersonName" class="col-md-2 control-label"></label> 
    <div class="col-md-10"> 
     <input asp-for="PersonName" class="form-control" /> 
     <span asp-validation-for="PersonName" class="text-danger"></span> 
    </div> 
</div> 

Что я хотел бы посмотреть, чтобы сделать, это заменить его чем-то вроде

<bootstraprow asp-for="PersonName"></bootstraprow> 

Однако я не уверен, чтобы написать taghelper, который содержит другие taghelpers

  1. Возможно ли это?
  2. Если можно привести примеры кода для вышеприведенного

Edit: Это не то же самое, как хранение variables в пользовательских taghelpers, но я хочу, чтобы вызывать другие пользовательские taghelpers или существующее taghelpers.

+0

Возможный дубликат [Вложение TagHelpers в ASP.NET 5 MVC 6] (http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-5-mvc-6) –

+0

Не дубликат. В «возможном дубликате» упоминается только о вложенности TagHelpers. Это касается создания меток TagGelpers, которые будут обрабатываться другим TagHelper. На данный момент это невозможно. –

+0

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

ответ

1

Если мы проверим, что у вас есть, единственным свойством является PersonName. Что касается самой разметки, все остальное - старый добрый HTML.

Поэтому вам не нужно ничего заменять. Вам нужно иметь конструктор, который имеет зависимость от IHtmlGenerator. Это будет автоматически введено, и вы сможете создавать разные теги на основе вашей модели.

Соответствующие IHtmlGenerator Подпись:

public interface IHtmlGenerator 
{ 
    ... 

    TagBuilder GenerateValidationMessage(
     ViewContext viewContext, 
     string expression, 
     string message, 
     string tag, 
     object htmlAttributes); 
    TagBuilder GenerateLabel(
     ViewContext viewContext, 
     ModelExplorer modelExplorer, 
     string expression, 
     string labelText, 
     object htmlAttributes); 
    TagBuilder GenerateTextBox(
     ViewContext viewContext, 
     ModelExplorer modelExplorer, 
     string expression, 
     object value, 
     string format, 
     object htmlAttributes); 
    ... 
} 

И это все!

Вот немного кода, который будет захватывать основной тег:

[HtmlTargetElement("bootstraprow")] 
public BootstrapRowTagHelper: TagHelper 
{ 
    protected IHtmlGenerator Generator { get; set; } 
    public InputTagHelper(IHtmlGenerator generator) 
    { 
     Generator = generator; 
    } 

    [HtmlAttributeName("asp-for")] 
    public ModelExpression For { get; set; } 

    [HtmlAttributeNotBound] 
    [ViewContext] 
    public ViewContext ViewContext { get; set; } 

    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     //todo: write your html generating code here. 
    } 
} 

Вот репо с примерами кода, который генерирует Bootstrap HTML из TagHelpers:

https://github.com/dpaquette/TagHelperSamples/blob/master/TagHelperSamples/src/TagHelperSamples.Bootstrap/

+1

Можете ли вы предоставить код для ссылки на выше в cshtml? – d234

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

  • Нет связанных вопросов^_^