我真的在努力将我的心态从 @ html.Action 的做法改变为新的 Component.Invoke 生活方式。
所以概述我的结构。我有一个名为" 合同"使用标准索引 IActionResult 。
在那里,我有一个部分视图是一个表单,我通常会使用以下内容从 index.cshtml 加载:
if(Something = my value){
@Html.Action("p_NewContract", new { id = x })
}
总是有效。
对于我能阅读的内容,我现在需要在每个Controller下面的结构良好的视图和部分视图文件夹之外创建一个新文件夹。我要创建的文件夹 "共享/组件/ p_NewContract.cshtml"
然后在该文件夹中,我需要使用ViewComponent的后缀( p_NewContractViewComponent.cs )创建一个.cs文件。不知何故,运行时会知道这两个东西属于一起吗?
在那个CS文件中,我然后在公共类之前添加[ViewComponent(Name = "p_NewContract")]
,然后我可以添加到我的Index.cshtml
@await Component.InvokeAsync("p_NewContract", new { id= 2})
我已经做了所有这些,没有任何迹象表明它有效。我错过了一些基本的东西,有没有办法让我的旧Html.Action回来?它变得如此简单。
帮助我沮丧的任何帮助都会很棒!
CAZ
答案 0 :(得分:0)
视图组件有两个部分:从ViewComponent
派生的类和组件应返回的视图。按照惯例,您的视图组件类实际上是/ViewComponents
,而按照惯例,您的视图会进入Views/Shared/Components/{component name}/Default.cshtml
。
但这只是惯例。与Razor根据控制器/操作名称自动查找视图的方式相同。事实上,课程可以去任何你喜欢的地方。它们是通过反射引入的,因此只要它在组件或引用的组件中的某个地方,它就会被发现。这些视图同样可以移动到任何你喜欢的位置,你只需告诉它在哪里找到它们,因为它将无法再根据惯例自动执行。请参阅:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components#view-search-path