How to invoke a View Component from controller

前端 未结 5 2007
耶瑟儿~
耶瑟儿~ 2021-02-13 19:08

Is it possible to invoke a View Component from controller and render it to a string? I am really looking for some code example for this. Any help will be much appreciated.

5条回答
  •  萌比男神i
    2021-02-13 19:32

    Here's a tag helper that I created to embed components via HTML like syntax. Invoking from a TagHelper like this should closely match invoking from a Controller.

    ViewComponent Tag Helper

    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Rendering;
    using Microsoft.AspNetCore.Mvc.ViewComponents;
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
    using Microsoft.AspNetCore.Razor.TagHelpers;
    
    
    namespace TagHelperSamples.Web
    {
        [HtmlTargetElement("component")]
        public class ComponentTagHelper : TagHelper
        {
            private DefaultViewComponentHelper _componentHelper;
    
            [HtmlAttributeName("name")]
            public string Name { get; set; }
    
            [HtmlAttributeName("params")]
            public object Params { get; set; }
    
            [ViewContextAttribute] // inform razor to inject
            public ViewContext ViewContext { get; set; }
    
            public ComponentTagHelper(IViewComponentHelper componentHelper)
            {
                _componentHelper = componentHelper as DefaultViewComponentHelper;
            }
    
            public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
            {       
                _componentHelper.Contextualize(ViewContext);
    
                output.Content.AppendHtml(
                    await _componentHelper.InvokeAsync(Name, Params)
                );
            }
        }
    }
    

    Usage

    
    

提交回复
热议问题