2017-02-02 5 views
14

최근 태그 도우미에서 태그 도우미를 사용하고 싶습니다. 나는 주위를 둘러 보았고 이것을 시도하는 다른 누군가를 찾을 수 없었습니다. 가난한 컨벤션을 사용하고 있습니까, 아니면 설명서가 누락 되었습니까?html을 반환하는 사용자 정의 태그 도우미에서 태그 도우미를 사용할 수 있습니까?

Ex. 태그 도우미은 다른 태그 도우미가 포함 된 HTML을 출력합니다.

Ex.

[HtmlTargetElement("tag-name")] 
public class RazorTagHelper : TagHelper 
{ 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<a asp-action=\"Home\" "); 
     output.Content.SetHtmlContent(sb.ToString()); 
    } 
} 

의 C#에서 <a asp-action> </a> 태그 도우미를 처리하는 방법이 있나요? 또는 태그 헬퍼를 사용하여 출력 HTML을 다시 처리 하시겠습니까?

+0

어떤 도움이 될 수 있습니까? http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-core-mvc-6 – Vlince

+0

@Vlince 링크를 제공해 주셔서 감사합니다.하지만 그럴 생각이 없습니다. 다른 중첩 된 태그없이 단일 입력 태그가 있어야합니다. 내가 정말로하고 싶은 것은 다른 태그 도우미를 호출하는 것이다. –

+0

언제든지 [구성 요소보기] (http://www.davepaquette.com/archive/2016/01/02/goodbye-child-actions-hello-view-components.aspx)를 찾고 계십니까? –

답변

9

아니요. TagHelpers는 면도기 구문 분석 기능입니다.

한 가지 대안은 TagHelper를 만들고 ProcessAsync/Process 메서드를 수동으로 호출하는 것입니다. 아카 :

var anchorTagHelper = new AnchorTagHelper 
{ 
    Action = "Home", 
}; 
var anchorOutput = new TagHelperOutput("a", new TagHelperAttributeList(), (useCachedResult, encoder) => new HtmlString()); 
var anchorContext = new TagHelperContext(
    new TagHelperAttributeList(new[] { new TagHelperAttribute("asp-action", new HtmlString("Home")) }), 
    new Dictionary<object, object>(), 
    Guid.NewGuid()); 
await anchorTagHelper.ProcessAsync(anchorContext, anchorOutput); 
output.Content.SetHtmlContent(anchorOutput); 
+0

이것이 유일한 방법 인 경우 얼마나 혼란 스럽습니까? 나는이 질문을 하루 정도 열려있는 상태로 두어 이것이 내가해야 할 일이라는 것을 확인하기 위해 할 것입니다. 다른 대답이 없다면, 나는 확실히 이것을 받아 들일 것입니다. 감사합니다. –

+0

이 답변은 훌륭하다고 생각합니다. 모든 것을 고급화하기 위해서는 뷰 컴포넌트가 필요합니다. 당신의 경우에, 간단하게'UrlHelper'를 사용하면 더 좋을지도 모릅니다. @JacobLinney –

+0

@ChristianGollhardt 의견과 제안에 감사드립니다; 나는 이것을하기위한 더 좋은 방법이 없다는 것을 확인하고 싶다. 그리고 이것은 제 실제 사용 사례가 아니며 단지 추상화였습니다. –

2

이 시나리오에 대한 작동하는지 모르겠어요,하지만이처럼 사용자 정의한 내용을 AnchorTagHelper에서 상속 다음을 수행 할 수 있습니다.

public class TestTagHelper : AnchorTagHelper 
{ 
    public TestTagHelper(IHtmlGenerator htmlGenerator) : base(htmlGenerator) { } 

    public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) 
    { 
     // Replaces <test> with <a> tag 
     output.TagName = "a"; 
     //do custom processing 
     output.Attributes.SetAttribute("class", "custom-class"); 
     //let the base class generate the href 
     base.ProcessAsync(context, output); 
    } 
} 

은 그럼 그냥 함께보기에이 태그 도우미를 사용할 수있는 모든 내장 된 기본 AnchorTagHelper의 선 (善).

<test asp-action="Index" asp-route-id="5"></test>