2015-09-21 14 views
6

Có cách nào để có được một TagHelper để hiển thị một TagHelper khác không?Gọi TagHelpers từ một TagHelper khác?

Trình hỗ trợ thẻ mẫu;

public class OuterTagHelper : TagHelper 
{ 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     output.TagName = ""; 
     output.Content.SetContent("Hello <inner></inner>"); 
    } 
} 

public class InnerTagHelper : TagHelper 
{ 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     output.TagName = ""; 
     output.Content.SetContent("World!"); 
    } 
} 

Ví dụ chế độ xem;

<outer></outer> 

Kết quả mong đợi;

Hello World! 

Tôi biết tôi có lẽ nên sử dụng ViewComponent thay vào đó, nhưng có thể đạt được hành vi mong đợi được trình bày ở trên không?

+1

Bạn có thể lồng chúng trong chế độ xem dao cạo như trong [câu hỏi này] (http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-5-mvc-6), nhưng tôi không nghĩ rằng bạn có thể gọi một mẫu khác từ bên trong chính phương thức xử lý. (Có lẽ bạn có thể bằng cách ghép nối chúng và gọi thủ công Quy trình, nhưng điều đó không có vẻ giống như một ý tưởng tuyệt vời) –

Trả lời

1

@Daniel J.G. là đúng, điều này không được khuyến nghị. Về mặt kỹ thuật, bạn có thể làm điều đó nếu bạn chạy nội dung của mình qua trình phân tích cú pháp dao cạo tùy biến cao và sau đó thực hiện nội dung như thể nó là một trang - nhưng gần như chắc chắn là cách tiếp cận sai với vấn đề của bạn.

2

Nếu bạn cần sử dụng một số chức năng loại trình trợ giúp thẻ hiện tại thì bạn có thể truy cập nó từ IHtmlGenerator. Điều này sẽ không giúp truy cập chức năng trợ giúp thẻ tùy chỉnh nhưng nếu bạn chỉ cần chức năng của các công cụ hiện có như nhãn, đầu vào thì thao tác này sẽ hoạt động

[HtmlTargetElement("input", Attributes = nameof(Wrap) + ", asp-for")] 
[HtmlTargetElement("select", Attributes = nameof(Wrap) + ", asp-for")] 
public class FormGroupWrapperTagHelper : TagHelper 
{ 
    public FormGroupWrapperTagHelper(IHtmlGenerator generator) 
    { 
     Generator = generator; 
    } 

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

    protected IHtmlGenerator Generator { get; } 

    public ModelExpression AspFor { get; set; } 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     var generateValidationMessage = Generator.GenerateValidationMessage(ViewContext, 
                    AspFor.Name, 
                    message: null, 
                    tag: null, 
                    htmlAttributes: null); 
..... 
} 
Các vấn đề liên quan