Asp.net core mvc 查看区域中的组件
我可能做错了(我找不到任何关于如何以其他方式做这件事的文档)。 在区域中创建ViewComponent时,搜索路径不正确:Asp.net core mvc 查看区域中的组件,asp.net-core-mvc,Asp.net Core Mvc,我可能做错了(我找不到任何关于如何以其他方式做这件事的文档)。 在区域中创建ViewComponent时,搜索路径不正确: namespace HelloWorld { [Area("Test")] public class HelloViewComponent : ViewComponent { public IViewComponentResult Invoke() { return View();
namespace HelloWorld
{
[Area("Test")]
public class HelloViewComponent : ViewComponent
{
public IViewComponentResult Invoke()
{
return View();
}
}
}
不会在/Areas/Test/Views/Components/Hello/Default.cshtml
中搜索视图,而是引发以下异常:
InvalidOperationException: The view 'Components/Hello/Default' was not found. The following locations were searched:
/Views/Home/Components/Hello/Default.cshtml
/Views/Shared/Components/Hello/Default.cshtml.
我通过以下操作调用视图:(在/Views/Home/Index.cshtml
)
似乎没有一种方法可以包含从中调用视图的区域
关于从区域内调用ViewComponent的正确方法的任何想法,或者如果上述内容不正确,我犯了错误
区域属性只能与控制器一起使用。当您向某个区域内的视图发出请求时,如果该视图中引用了任何视图组件,则MVC将按特定顺序查找该视图组件的视图。
以下是当请求与基于区域的控制器和非区域控制器匹配时,视图组件视图的搜索方式的区别 例如:
/Admin/Home/Index
,其中Admin
是一个区域
- /区域/Admin/Views/Home/Components/Products/Default.cshtml
- /区域/Admin/Views/Shared/Components/Products/Default.cshtml
- /视图/Shared/Components/Products/Default.cshtml
/Home/Index
(非区域请求)
- /视图/Home/Components/Products/Default.cshtml
- /视图/Shared/Components/Products/Default.cshtml
使用组件时,您应该能够使用视图的绝对路径,如此视图(“~/Areas/Test/Views/Components/Hello/Default.cshtml”)来解决问题。ViewComponents文件应按如下方式放置: 然后从视图中调用:
@await Component.InvokeAsync(typeof(Swastika.Web.Start.Areas.Portal.ViewComponents.MainSidebar));
这对我有用。我希望有帮助 因此,您的意思是(简而言之):搜索路径与它所调用的上下文相关-如果我错了,请纠正我-遗憾的是,这不是我一直在寻找的答案-但我感谢您的解释,并且现在理解了这个问题。@logikal:局部视图没有消失,但在MVC6中它们是不同的。还有一个Html.Partial和PartialViewResult@logikal:请从下面看我的答案。嗨,谢谢你的答案-我这些天不做.NET工作,所以我不能把这个答案标记为比已经回答的更好的答案,但是如果有人想尝试一下,看看它是否回答了这个问题,请放心,我会改变答案。这正是我所需要的。
@await Component.InvokeAsync(typeof(Swastika.Web.Start.Areas.Portal.ViewComponents.MainSidebar));