Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何从控制器调用视图组件_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 如何从控制器调用视图组件

Asp.net core 如何从控制器调用视图组件,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,是否可以从控制器调用视图组件并将其呈现为字符串?我真的在寻找一些代码示例。任何帮助都将不胜感激。您可以这样做,但您必须应用以下内容,因为它是由DefaultViewComponentHelper呈现的 您必须创建此实例,并创建需要IViewComponentSelector和IViewComponentInvokerFactory的实例 为了做到这一点,我做了以下事情 public class HomeController : Controller { Microsoft

是否可以从控制器调用视图组件并将其呈现为字符串?我真的在寻找一些代码示例。任何帮助都将不胜感激。

您可以这样做,但您必须应用以下内容,因为它是由DefaultViewComponentHelper呈现的

您必须创建此实例,并创建需要IViewComponentSelector和IViewComponentInvokerFactory的实例

为了做到这一点,我做了以下事情

public class HomeController : Controller
    {
        Microsoft.AspNet.Mvc.DefaultViewComponentHelper helper = null;
        Microsoft.AspNet.Mvc.Razor.RazorView razorView = null;
        public HomeController(IViewComponentSelector selector,IViewComponentInvokerFactory factory,IRazorPageFactory razorPageFactory,IRazorPageActivator pageActivator,IViewStartProvider viewStartProvider)
        {
            helper = new DefaultViewComponentHelper(selector, factory);
            razorView = new Microsoft.AspNet.Mvc.Razor.RazorView(razorPageFactory, pageActivator, viewStartProvider);           
        }
        public IActionResult Index()
        {                  
            ViewContext context = new ViewContext(ActionContext, razorView, ViewData, null);
            helper.Contextualize(context);
            string st1 = helper.Invoke("My", null).ToString();
            return View();
        }
}
这是我的示例视图组件

 public class MyViewComponent : ViewComponent
    {     

        public MyViewComponent()
        {

        }

        public IViewComponentResult Invoke()
        {
            return Content("This is test");
        }
    }

针对MVC 6.0.0-beta4(VS2015 RC)更新的dotnetstep答案中的代码:


从beta7开始,现在可以直接从控制器返回ViewComponent。检查机器的MVC/Razor部分

MVC中新的ViewComponentResult使返回结果变得很容易 从动作中删除ViewComponent。这使您可以轻松地公开 ViewComponent作为独立端点的逻辑

因此,现在返回示例视图组件的代码只需要是:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return ViewComponent("My");
    }
}

下面是我创建的一个标记帮助器,它通过类似HTML的语法嵌入组件。像这样从TagHelper调用应该与从控制器调用紧密匹配

ViewComponent标记辅助对象

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)
            );
        }
    }
}
用法

<component name="RecentComments" params="new { take: 5, random: true }"></component>

请参考

在其示例中,视图组件直接从控制器调用,如下所示:

public IActionResult IndexVC()
{
    return ViewComponent("PriorityList", new { maxPriority = 3, isDone = false });
}

视图组件是什么意思?当你说字符串时,你想在视图中呈现字符串还是将视图组件呈现为字符串?mvc 6中的视图组件:这不适用于最新的位。试试这个:这个答案不应该再被接受了。请看其他答案。您只需在.NETCore中调用
返回ViewComponent(…
public IActionResult IndexVC()
{
    return ViewComponent("PriorityList", new { maxPriority = 3, isDone = false });
}