2015-11-11 11 views
5

Tôi đã xem các ví dụ về trình hỗ trợ tag trên google nhưng không thể tìm thấy bất kỳ ví dụ nào tôi đang tìm kiếm.Cách viết thẻ tùy chỉnh ASP.NET 5 có chứa các taghelpers khác

Tôi có đoạn mã sau:

<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> 

gì tôi muốn nhìn làm là thay thế nó bằng một cái gì đó giống như

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

Tuy nhiên tôi không chắc chắn để viết một taghelper chứa khác taghelpers

  1. Có thể không?
  2. Nếu có thể cung cấp ví dụ mã cho trên

Edit: Nó không phải là giống như lưu trữ variables trong taghelpers tùy chỉnh nhưng tôi muốn gọi taghelpers tùy chỉnh khác hoặc taghelpers hiện có.

+0

có thể trùng lặp của [TagHelpers lồng nhau trong ASP.NET 5 MVC 6] (http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-5-mvc-6) –

+0

Không trùng lặp. "Có thể trùng lặp" chỉ đề cập đến việc lồng thẻ TagHelpers. Điều này là về TagHelpers tạo đánh dấu sẽ được xử lý bởi một TagHelper khác. Hiện tại không thể thực hiện được điều này. –

+0

Bạn đang hỏi xem bạn có thể viết trình trợ giúp thẻ có chứa những người trợ giúp thẻ khác không và nếu có, hãy cung cấp ví dụ. Theo tôi, câu hỏi liên quan bao gồm cả hai. –

Trả lời

1

Nếu chúng tôi kiểm tra những gì bạn có, thuộc tính duy nhất mà bạn đang sử dụng là Tên người. Đối với bản thân đánh dấu, mọi thứ khác là HTML cũ tốt.

Vì vậy, bạn không cần phải thay thế bất kỳ thứ gì. Những gì bạn cần là có hàm tạo có sự phụ thuộc vào IHtmlGenerator. Điều này sẽ được tự động tiêm và bạn sẽ có thể tạo các thẻ khác nhau dựa trên mô hình của bạn.

liên quan IHtmlGenerator Chữ ký:

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); 
    ... 
} 

Và đó là nó!

Dưới đây là một chút mã mà sẽ nắm bắt được tag cơ bản:

[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. 
    } 
} 

Dưới đây là một repo với mẫu mã mà tạo ra Bootstrap HTML từ TagHelpers:

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

+1

Bạn có thể cung cấp mã để tham khảo ở trên trong cshtml không? – d234

Các vấn đề liên quan