How to write a custom ASP.NET 5 taghelper that contains other taghelpers

大憨熊 提交于 2020-01-14 09:46:08

问题


I've been looking at examples on taghelpers on google but couldn't find any example I'm looking for.

I have the following 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>

What i'd look to do is replace it with something like

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

However I'm not sure to write a taghelper that contains other taghelpers

  1. Is it possible?
  2. If possible provide code example for the above

Edit: It is not the same as storing variables in custom taghelpers but I want to call other custom taghelpers or existing taghelpers.


回答1:


If we check what you have, the only property that you are using is PersonName. As for the markup itself, everything else is good old HTML.

So you don't need to replace anything. What you need is to have constructor that has a dependency on IHtmlGenerator. This will get automatically injected and you will be able to generate the different tags based on your model.

Relevant IHtmlGenerator Signature:

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

And that's it!

Here's a bit of code that would capture the basic tag:

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

Here's a repo with sample code that generates Bootstrap HTML from TagHelpers:

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



来源:https://stackoverflow.com/questions/33649181/how-to-write-a-custom-asp-net-5-taghelper-that-contains-other-taghelpers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!