2017-04-26 1 views
0

Sagen wir, ich möchte einen benutzerdefinierten ImageTagHelper erstellen, der den Bildnamen aus einem Datenbankfeld lädt und einen IMG generiert. Da nur der Name von der db kommt, müssen Sie einen Ordner angeben, in dem alle Bilder existieren.Pfad in Tag Helper Attribut auswählen

Der Tag Helper wie folgt aussieht:

[HtmlTargetElement("image", Attributes = ForAttributeName, TagStructure = TagStructure.WithoutEndTag)] 
    public class ImageTagHelper : Microsoft.AspNetCore.Razor.TagHelpers.TagHelper 
    { 
     public ImageTagHelper(IHtmlGenerator generator) 
     { 
     } 

     public ModelExpression For { get; set; } 

     /// <summary> 
     /// Path to picture 
     /// </summary> 
     public string ImagePath { get; set; } 

     /// <summary> 
     /// Extension 
     /// </summary> 
     public string Extension { get; set; } 

     /// <summary> 
     /// Alt text 
     /// </summary> 
     public string Alt { get; set; } 


     public override void Process(TagHelperContext context, TagHelperOutput output) 
     { 
      output.TagName = "img"; 
      output.TagMode = TagMode.SelfClosing; 

      var src = ImagePath + For.ModelExplorer.Model + "." + Extension; 
      output.Attributes.Add("src", src); 
      output.Attributes.Add("alt", Alt); 
     } 



    } 

In ASP.NET Razor ich schreiben würde:

<image asp-for="Id" image-path="~/images/" alt="No picture" extension="png"/> 

Wie kann ich einen Weg in wwwroot wählen, wenn der Text im image-path-attribute eingeben? Ich schaute in GitHub ImageTagHelper source code, aber das src Attribut ist auch als String definiert. Gibt es etwas Magisches?

Antwort

2

AFAIK, das ist die Magie der Visual Studio Tooling für HTML-Attribute. Es hat nichts mit Tag-Helfer oder Aspnet-Kern zu tun.

+1

Beachten Sie, dass es ein offenes Problem bei Razor gibt, ein Markierungsattribut für TagHelpers bereitzustellen, das VS dann konsumieren kann, um die richtige IntelliSense bereitzustellen: https://github.com/aspnet/Razor/issues/429 –

Verwandte Themen