找不到名为“ XX”的视图组件

Ame*_*sed 2 asp.net-mvc asp.net-core-mvc

我正在使用aspnet 5和MVC 6。

我已经按照此处的说明创建了一个视图组件,但是在运行网站时出现错误

找不到名为“ XX”的视图组件。在

@Component.Invoke("XX"))
Run Code Online (Sandbox Code Playgroud)

这是我项目的结构

namespace Test
{
public class XXViewComponent : ViewComponent
{
   public IViewComponentResult Invoke()
    {       
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

}

然后在views文件夹中,我有Views / Assets / index.cshtml

<div>
    <div class="col-md-4">
        @Component.Invoke("XX"))
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

vc在

Views/Assets/Components/XX/default.cshtml
<div class="col-md-6" id="listOfCustomers">
    <table class="table table-condensed">
      <span> Test partial View</span>
    </table>
</div>
Run Code Online (Sandbox Code Playgroud)

小智 5

我有一个类似的问题。帮助我的是您自己使用过的页面底部(避免使用魔术字符串):

  • 从类的名称(以及构造函数)的名称中删除“ ViewComponent”后缀-然后,您将拥有:

    public class XX : ViewComponent
    
    Run Code Online (Sandbox Code Playgroud)
  • nameof在调用视图组件时使用:

    @Component.Invoke(nameof(XX))
    
    Run Code Online (Sandbox Code Playgroud)
  • 不要忘记using在主视图中使用视图组件(Views / Assets / index.cshtml)-就您而言@using Test

这既可以帮助您,又可以节省组件的调用时间。

正如Joe Audette指出的那样,视图可能位于不寻常的位置,但这将导致不同的错误消息。


Joe*_*tte 0

您是否将命名空间添加到 _ViewImports.cshtml 中?

@using Test
Run Code Online (Sandbox Code Playgroud)

  • 另外,我认为视图需要位于 Views/Shared/Components/XX 下,而不是在 Views/Assets 下,除非您已自定义视图引擎以在那里查找它 (2认同)