2015-05-20 21 views
7

Tôi đang cố gắng tạo một trình trợ giúp thẻ tùy chỉnh trong MVC 6 nhưng không thể làm cho nó hoạt động.Làm cách nào để tạo trình trợ giúp thẻ tùy chỉnh cho dao cạo?

Đây là lớp trình trợ giúp thẻ demo được xác định trong dự án ứng dụng web.

namespace Microsoft.AspNet.Mvc.TagHelpers 
{ 
    [TargetElement("demo", Attributes = CustomAttributeName)] 
    public class DemoTagHelper : TagHelper 
    { 
     private const string CustomAttributeName = "asp-custom"; 

     [HtmlAttributeName(CustomAttributeName)] 
     public string Custom { get; set; } 

     public string Value { get; set; } 


     public override void Process(TagHelperContext context, TagHelperOutput output) 
     { 
      output.TagName = "div"; 
      output.Attributes["foo"] = "bar"; 
     } 
    } 
} 

Đây là cách tôi sử dụng nó trong quan điểm của tôi:

<demo asp-custom="hello world!"> 
    Please work this time :) 
</demo> 

tôi đã cố gắng rất nhiều điều. Đã xóa thuộc tính TargetElement hoặc thay đổi không gian tên. Không có gì thay đổi ... Kết quả vẫn như cũ.

Nhân tiện, phiên bản Microsoft.AspNet.Mvc.TagHelpers của chúng tôi là 6.0.0-beta4.

Có lẽ tôi phải đăng ký trình trợ giúp thẻ của mình ở đâu đó? Tôi đã xem xét mã nguồn MVC và họ không tham chiếu đến những người trợ giúp thẻ của riêng họ ở bất cứ đâu. Vì vậy, tôi nghĩ rằng không cần đăng ký.

Sự cố ở đây ở đâu?

+0

Xem http://docs.asp.net/projects/mvc/en/latest/views/tag-helpers/authoring.html về cách tạo người trợ giúp thẻ tùy chỉnh. – RickAndMSFT

Trả lời

6

Bạn có thể bật chế TagHelper cho các thẻ tùy chỉnh bằng cách thêm một chỉ thị addTagHelper đến _ViewImports.cshtml tập tin tìm thấy trong thư mục Views:

@addTagHelper "*, YourMvcAssembly" 

Cập nhật

@yilmaz cũng cần thêm một tham chiếu đến Microsoft.AspNet.Tooling.Razor như được nêu chi tiết bên dưới trong phần bình luận.

+0

Bây giờ tôi đã cố gắng làm cho nó hoạt động. Tôi cần thêm hai thứ và đây là một trong số đó. Và một trong những khác là một tham chiếu đến ** Microsoft.AspNet.Tooling.Razor ** lắp ráp. Vì vậy, có thể bạn cũng có thể thêm câu trả lời này vào câu trả lời của mình để làm cho nó hoàn chỉnh hơn cho việc sử dụng trong tương lai. – Yves

+0

@Yilmaz Đẹp nhất, tôi cũng đã thêm nó vào câu trả lời. Cảm ơn. :) – hutchonoid

2

Đây là những gì tôi có cho trình trợ giúp thẻ tùy chỉnh hiện tại và nó hoạt động. Tôi đã thay đổi nó để nhắm mục tiêu một phần tử demo. Hãy dùng thử:

namespace TestingTagHelpers.TagHelpers 
{ 
    using Microsoft.AspNet.Razor.Runtime.TagHelpers; 
    using System; 

    /// <summary> 
    /// <see cref="ITagHelper"/> implementation targeting &lt;demo&gt; elements. 
    /// </summary> 
    //[TargetElement("demo")] 
    public class DemoTagHelper : TagHelper 
    { 
     public override void Process(TagHelperContext context, TagHelperOutput output) 
     { 
      var childContent = context.GetChildContentAsync().Result; 
      string demoContent = childContent.GetContent(); 
      string demo = context.AllAttributes["asp-custom"].ToString(); 

      output.TagName = "div"; 
      output.Attributes.Clear(); 
      output.Attributes["data-custom"] = demo; 
      output.Content.SetContent(demoContent); 
     } 
    } 
} 
Các vấn đề liên quan