2015-11-11 12 views
5

Ich habe Beispiele auf Taghelpers auf google gesehen, konnte aber kein Beispiel finden, das ich suche.Wie schreibe ich einen benutzerdefinierten ASP.NET 5 Taghelper, der andere Taghelper enthält

Ich habe den folgenden Code:

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

Was ich ist es mit etwas ersetzen zu tun aussehen würde wie

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

aber ich bin nicht sicher, eine taghelper zu schreiben, die andere enthält taghelper

  1. Ist es möglich?
  2. Wenn möglich bieten Codebeispiel für die oben

Edit: Es ist nicht das gleiche wie variables in benutzerdefinierten taghelpers speichern, aber ich möchte andere benutzerdefinierte taghelpers oder bestehende taghelpers nennen.

+0

Mögliche Duplikat [Nesting TagHelpers in ASP.NET 5 MVC 6] (http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-5-mvc-6) –

+0

Kein Duplikat. Das "mögliche Duplikat" erwähnt nur das Verschachteln von TagHelpern. In diesem Fall wird TagHelpers ein Markup generieren, das von einem anderen TagHelper gehandhabt wird. Was im Moment nicht möglich ist. –

+0

Sie fragen, ob Sie Tag-Helfer schreiben können, die andere Tag-Helfer enthalten, und wenn ja, geben Sie ein Beispiel an. Meiner Meinung nach deckt die damit verbundene Frage beides ab. –

Antwort

1

Wenn wir überprüfen, was Sie haben, ist die einzige Eigenschaft, die Sie verwenden, PersonName. Was das Markup selbst betrifft, ist alles andere gutes HTML.

Sie müssen also nichts ersetzen. Was Sie brauchen, ist Konstruktor, der eine Abhängigkeit von IHtmlGenerator hat. Dies wird automatisch injiziert und Sie können die verschiedenen Tags basierend auf Ihrem Modell generieren.

Relevante IHtmlGenerator Signatur:

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

Und das ist es!

Hier ist ein Stück Code, der die grundlegenden Tag erfassen würde:

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

Hier ist ein Repo mit Beispielcode, der erzeugt Bootstrap HTML aus TagHelpers:

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

+1

Können Sie den Code angeben, um das oben genannte in cshtml zu referenzieren? – d234

Verwandte Themen