在ASP.NET Core 1.1中引入了ViewComponent作为Tag Helper(请参阅Invoking a view component as a Tag Helper
here部分)。但以下仅返回视图的Test for VC
部分。似乎<vc:annual-orders>...</vc:annual-orders>
部分根本没有被调用。
视图\共享\组件\ AnnualOrders \ Default.cshtml :
@{
Layout = "";
}
<div>Test for VC</div>
<div>
<vc:annual-orders>
</vc:annual-orders>
</div>
的Myproj \ ViewComponents \ AnnualOrdersViewComponent.cs :
public class AnnualOrdersViewComponent : ViewComponent
{
private readonly OrdersContext _context;
public AnnualOrdersViewComponent(OrdersContext context)
{
_context = context;
}
public async Task<IViewComponentResult> InvokeAsync()
{
var lstOrders = _context.Where(t => t.orderType == "new");
return View(await lstOrders);
}
}
注意:
How to Invoke a View component as a tag helper
的问题,其中解释了Tag Helpers的Pascal类和方法参数已转换为较低的kebab case。 答案 0 :(得分:3)
这不能解决您的具体情况,但它与您密切相关,因此我认为我会将它留给需要听的人:
即使标记帮助器已正确注册,例如{@ {1}},按照@ alan-savage的回答,如果不包括_ViewStart.cshtml
方法中所有必需的参数,它将无法渲染。这看起来似乎是不言而喻的,但是由于它没有异常响应,因此在开始时可能会造成混淆, Visual Studio 中也没有为此内置任何设计时验证。
例如,如果您有:
InvokeAsync()
然后将您的标签助手称为:
public class AnnualOrdersViewComponent : ViewComponent {
public async Task<IViewComponentResult> InvokeAsync(string labelName) {
…
}
}
您的代码将在没有警告的情况下进行编译,并且您的页面将毫无例外地运行-但是不会渲染视图组件,而是将其注入页面的源代码中。实际上,如果您将视图组件参数值设置为可选,甚至会发生这种情况,因为标记帮助程序语法不支持可选参数:
<vc:annual-orders></vc:annual-orders>
很明显,在上述两个示例中,都可以通过以下方式解决此问题:
public class AnnualOrdersViewComponent : ViewComponent {
public async Task<IViewComponentResult> InvokeAsync(string labelName = null) {
…
}
}
同样,这不能解决您的问题的具体细节,但是我认为遇到此问题的开发人员很可能会遇到此线程,因此,如果标签帮助程序已经存在,我想将此作为另一个故障排除步骤包括在内正确注册。
答案 1 :(得分:1)
我一直在努力解决这个问题,并最终设法让视图组件的标记助手工作。 我遇到的问题是标记帮助程序没有处理区域内的视图。 为了解决这个问题,我将/ Views目录中的_ViewImports.cshtml和_ViewStart.cshtml页面复制到了/ Areas // Views目录中,标签助手现在正常工作,VS正在我的属性上给我智能感知。
不要忘记添加到_ViewStart.cshtml文件(包含视图组件的程序集的名称在哪里:
true
答案 2 :(得分:0)
这不有效。
@addTagHelper *, MyProject.Components
这有效
@addTagHelper *, MyAssemblyName
它使用程序集名称,而不是名称空间。