当前位置: 首页 > 知识库问答 >
问题:

将组件视为标记帮助器不会被调用

子车修平
2023-03-14

在ASP中引入了调用视图组件作为标记助手。NET内核1.1。(请参阅“将视图组件作为标记辅助对象调用”)。但是下面只返回视图中VC部分的测试。似乎

视图\共享\组件\年度订单\默认值。cshtml:

@{ 
    Layout = "";
}
<div>Test for VC</div>
<div>
    <vc:annual-orders>

    </vc:annual-orders>
</div>

myProj\ViewComponents\AnnualOrdersViewComponent。反恐精英:

public class AnnualOrdersViewComponent : ViewComponent
{
    private readonly OrdersContext _context;

    public AnnualOrdersViewComponent(OrdersContext context)
    {
        _context = context;
    }

    public async Task<IViewComponentResult> InvokeAsync()
    {
        var lastOrders = _context.Where(t => t.orderType == "new");
        return View(await lastOrders);
    }
}

注:

  1. 我在用ASP。NET Core 1.1和不带标记辅助程序的视图组件工作正常

共有3个答案

何睿范
2023-03-14

这不工作。

@addTagHelper *, MyProject.Components

这很管用

@addTagHelper *, MyAssemblyName

它采用程序集名称,而不是名称空间。

乐正德华
2023-03-14

我一直在努力解决这个问题,最终设法让视图组件的标签帮助器工作。

我遇到的问题是,标签助手没有处理区域内的视图。为了解决这个问题,我复制了\u ViewImports。cshtml\u ViewStart。cshtml页面从/Views目录进入/区域/

不要忘记添加到\u ViewStart。cshtml文件(其中

@addTagHelper *, <AssemblyName>

岳良策
2023-03-14

这并不能解决您的具体情况,因为您的视图组件是无参数的,但由于它密切相关,我将把它留给需要了解它的任何人:

即使标记帮助器已正确注册在例如\u ViewStart中。cshtml,根据@alan savage的回答,除非包含InvokeAsync()方法中的所有参数,否则它不会呈现。

这似乎是不言而喻的,但它可能会令人困惑,因为它没有异常响应,也没有在Visual Studio中内置任何(明显的)设计时验证。

注意:实际上有设计时验证,只是不明显。在代码编辑器中,正确引用的视图组件将显示粗体属性名称。但如果你不去寻找,这很容易错过。例如,在错误列表面板中,或者作为构建输出的一部分,没有显示警告。

例如,如果你有:

public class AnnualOrdersViewComponent : ViewComponent 
{
    public async Task<IViewComponentResult> InvokeAsync(string labelName) 
    {
        … 
    }
}

然后将您的标记助手称为:

<vc:annual-orders></vc:annual-orders>

代码将在没有警告的情况下编译,页面将毫无例外地运行,但视图组件将不会呈现。

事实上,在ASP之前。NET Core 6,如果将view component参数设置为可选,甚至会发生这种情况,因为标记帮助器语法不支持可选参数:

public class AnnualOrdersViewComponent : ViewComponent 
{
    public async Task<IViewComponentResult> InvokeAsync(string labelName = null) 
    {
        … 
    }
}

注:自ASP。NET Core 6 Preview 6,名为标记助手的视图组件现在将支持可选参数(源代码)。

显然,在上述任何一个例子中,这都可以通过简单地包含所有参数来解决:

<vc:annual-orders label-name="Contrived Example"></vc:annual-orders>

同样,这并没有解决问题的具体细节,但我想遇到这个问题的开发人员可能会遇到这个线程,所以我想把它作为另一个故障排除步骤,以防标记助手已经正确注册。

 类似资料:
  • 正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。 我的应用程序配置: 有一个作业和一个触发器与之相关: 调度程序将启动,作业和触发器将正确添加

  • null null 这里,我试图给提供边距,但它不起作用...我使用的定位有效,但margin-top不起作用。请告诉我为什么中的margin-top属性不起作用。这是我在stackoverflow中的第一个问题,如果问题问错了,请原谅。:)

  • 因此,我有一个对象列表,我想要部分或全部被处理,我想要记录那些被处理的对象。 为了进一步解释,这个问题的关键在于:“不要以无意的方式使用API,即使它完成了您的当前目标。”我的问题是,每次使用peek(从调试流到验证整个链按设计工作并再次删除.peek()为止)是否都是无意中的使用。因此,如果使用它作为记录流实际处理的每个对象的手段,则被认为是无意的使用。

  • 我已经将监控系统配置为下一步工作: 但看起来碳标记器只会将指标转储到ElasticSearch,而不会转储到Graphite。同时,carbon tagger成功地将其内部指标发送到carbon cache,这些指标很好地显示在Graph Explorer中。我查看了carbon标记器的源代码,找不到它将从Statsdemon metrics收到的任何信息发送到graphite的位置。所以现在我很

  • 在我当前的项目中,我正在使用Maven和Spring。我目前正在使用SLF4J记录器来记录服务。代替它,我想使用OWASP-ESAPI记录器。我不想使用安全性,只是日志服务。有人能指导我如何使用记录器,用最少的努力替换slf4j记录器吗?我尝试了很多谷歌搜索,但没有任何帮助。我也会非常感谢一些链接来获得有关记录器的知识。

  • 我是spring webflux和reactor的新手,我希望在发生某些特定异常时有一个回退机制,根据我的研究,onErrorResume方法可以做到这一点,但它不会被调用,我得到500个内部服务器错误,而不是触发回退并阻止此错误。 注意:我使用Spring网络流量,这意味着它在Reactor项目的正常行为中做了一些改变 这是堆栈跟踪