代码之家  ›  专栏  ›  技术社区  ›  nbofni

有没有一种方法可以将东西嵌套在ASP中的视图组件(作为标记助手编写)中。NET?

  •  0
  • nbofni  · 技术社区  · 3 年前

    我想做这样的事。。。

    <vc:sidebar-submenu id=@configurationId>
        <vc:sidebar-submenu-item action-name="Index" controller-name="MapDefinitions" text="Map Definitions" />
        <vc:sidebar-submenu-item action-name="Index" controller-name="Nodes" text="Nodes" />
        <vc:sidebar-submenu-item action-name="SOIIndex" controller-name="SOIHome" text="Signals of Interest" requires-web-role-authorization=true />
        <vc:sidebar-submenu-item action-name="Home" controller-name="ProtectedFrequency" text="Protected Frequencies" />
    </vc:sidebar-submenu>
    

    边栏子菜单组件非常简单。

    <div class="sidebar-submenu" [email protected]>
        <ul>
    
        </ul>
    </div>
    

    SidebarSubmenuItem组件也相当简单。

    @{
        string actualCurrentPage = Context.Request.Path.ToString().Split('/')[1];
    }
    
    <a class="nav-link dropdown-level @(actualCurrentPage == Model.ExpectedCurrentPage ? "active" : null)" [email protected]>
        <div [email protected]>
            <span>@Model.Text</span>
        </div>
    </a>
    

    然而,当我测试这个时,实际上我放在视图组件“内部”的任何东西都不会出现。

    基本上,我的问题是,有没有办法将HTML元素和/或其他视图组件嵌套在另一个视图组件中?

    还是我试图以从未设计过的方式使用视图组件?

    我想,如果你的顶级组件有几个“叶节点”,嵌套项可能会落在那里,这会变得很混乱。。。然而,在我的例子中,只有一个“叶节点”(空元素)。

    这一切都是为了减少代码重复,并比我们目前更好地维护UI代码。

    在React中,这可能是一件非常容易的事情。。。

    我尝试做的事情的明显替代方案是对div和ul元素进行“硬编码”,如下所示:

    <div class="sidebar-submenu" [email protected]>
        <ul>
            <vc:sidebar-submenu-item action-name="Index" controller-name="MapDefinitions" text="Map Definitions" />
            <vc:sidebar-submenu-item action-name="Index" controller-name="Nodes" text="Nodes" />
            <vc:sidebar-submenu-item action-name="SOIIndex" controller-name="SOIHome" text="Signals of Interest" requires-web-role-authorization=true />
            <vc:sidebar-submenu-item action-name="Home" controller-name="ProtectedFrequency" text="Protected Frequencies" />
         </ul>
    </div>
    
    0 回复  |  直到 3 年前
        1
  •  1
  •   Mike Brind    3 年前

    一个ASP。NET核心视图组件不支持子内容或嵌套组件。它不像React或Blazor组件。对于您的特殊要求,我建议使用锚标记助手。如果您想将菜单标记封装在自己的文件中,请将其包含在一个分部中: https://www.learnrazorpages.com/razor-pages/partial-pages

    如果您的菜单是数据库驱动的,那么就应该使用视图组件,因为该组件的控制器类支持依赖项注入。

    推荐文章