如何将Html.MvcSiteMap()。Menu()与动态参数一起使用?

迈克·王

我正在使用MvcSiteMapProvider 4.6.3,MVC 4。

我想使用Html.MvcSiteMap()。Menu()生成菜单。

问题是URL中有多个参数,这些参数根据用户和文档ID进行更改。

我的站点地图如下所示:

<mvcSiteMapNode title="Home" controller="Home" action="Index">
  <mvcSiteMapNode title="Site Map Test" controller="SitemapTest" action="Index" area="" key="sitemaptestnode">
    <mvcSiteMapNode title="Sub1" controller="SitemapTest" action="Sub1" area="" />
    <mvcSiteMapNode title="Sub2" controller="SitemapTest" action="Sub2" area="" />
  </mvcSiteMapNode>
</mvcSiteMapNode>

这些动作需要不同的参数。

    public ActionResult Index(string id, string clientId)
    {
        return View();
    }

    public ActionResult Sub1(string id, string productId)
    {
        return View();
    }

    public ActionResult Sub2(string id, string staffId)
    {
        return View();
    }

我尝试使用HTML帮助程序来生成菜单。

@Html.MvcSiteMap().Menu(node, false, false)

因此,如果我在“索引”页面上。菜单应该是

SitemapTest / Index / product1?clientId = clientId2

SitemapTest / Index / client1?productId = product2

SitemapTest / Index / client1?staffId = staffId1

这些ID是从数据库获取的。

有没有一种方法可以将参数传递给HTML帮助,以指定用于每个链接的ID?

夜猫子888

有两种方法,取决于路由值是直接用于识别页面还是环境值。

对于直接标识页面的值,应使用IDynamicNodeProvider或ISiteMapNodeProvider配置节点,以便在将新记录添加到数据库时它们可以构建新节点。

public class ProductDynamicNodeProvider 
    : DynamicNodeProviderBase 
{ 
    public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node) 
    {
        // TODO: Replace MyEntities with your entity framework context object
        using (var db = new MyEntities())
        {
            // Create a node for each album 
            foreach (var album in db.Products) 
            { 
                DynamicNode dynamicNode = new DynamicNode(); 
                dynamicNode.Title = product.Name; 
                dynamicNode.ParentKey = "Products"; // There must be a node in the SiteMap with key set to "Products" for this to work

                dynamicNode.PreservedRouteParameters.Add("id"); // Force a match on this parameter always
                dynamicNode.RouteValues.Add("productId", product.Id);

                yield return dynamicNode;
            }
        }
    } 
}

对于动态节点提供程序,您需要一个定义节点,该定义节点将在创建节点时用作模板,并且实际上不会存在于SiteMap中。

// This node will be added to the SiteMap and serves as the parent node of each product
<mvcSiteMapNode title="All Products" controller="Products" action="Index" area="" key="Products">
    // This node will become a template for each product node, but the node itself won't be added to the SiteMap
    <mvcSiteMapNode controller="Products" action="Details" area="" dynamicNodeProvider="MyNamespace.ProductDynamicNodeProvider, MyAssemblyName" />
</mvcSiteMapNode>

对于环境值(用户ID,会话ID等),您可以通过将SiteMap配置为keepedRouteParameters来强制SiteMap始终匹配它们。

<mvcSiteMapNode title="Sub2" controller="SitemapTest" action="Sub2" area="" preservedRouteParameters="clientId,productId,staffId,id" />

您还可以通过在某些参数上强制匹配并为其他参数的组合提供节点实例来结合这两种技术。

要深入了解这些选项,请阅读如何使MvcSiteMapProvider记住用户的位置

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将动态分配与以迭代器作为参数的方法一起使用?

来自分类Dev

如何将.htaccess与脱机html一起使用?

来自分类Dev

如何将ArgumentOutOfRangeException与多个参数一起使用?

来自分类Dev

如何将动态HTML与带有角度引导程序弹出窗口的指令一起使用?

来自分类Dev

如何将构造函数与无参数的参数一起使用

来自分类Dev

如何将参数与模型一起传递?

来自分类Dev

Angular2-如何将路由器与动态网址一起使用

来自分类Dev

如何将scrollview与动态高度的子视图一起使用?

来自分类Dev

如何将jquery .data与动态添加的元素一起使用

来自分类Dev

如何将ngOptions与包含HTML实体的字符串一起使用?

来自分类Dev

我如何将 simple_html_dom 与 phantomjs 一起使用

来自分类Dev

将Scrapyd与参数一起使用

来自分类Dev

将params关键字与动态类型参数一起使用

来自分类Dev

将data-i8n与动态参数一起使用

来自分类Dev

在Struts 2中将ActionForward与动态参数一起使用

来自分类Dev

如何将构建器模式与所有参数强制一起使用?

来自分类Dev

如何将xpcall与具有参数的函数一起使用?

来自分类Dev

如何将map与需要更多参数的函数一起使用

来自分类Dev

如何将Url.Action与列表参数一起使用?

来自分类Dev

如何将Mongoosejs的“查找”功能与可选参数一起使用?

来自分类Dev

如何将parentNode与add / removeClass和<audio>的IF参数一起使用?

来自分类Dev

如何将for_each与其他参数一起使用?

来自分类Dev

如何将Source参数与Install-WindowsFeature一起使用

来自分类Dev

如何将QProcess与参数中的变量一起使用?

来自分类Dev

如何将setParameter(JPQL Namedquery)与多个参数一起使用

来自分类Dev

如何在orderby子句中将LINQ与动态参数一起使用

来自分类Dev

如何使输入与参数一起使用?

来自分类Dev

如何将地图与休眠注释一起使用

来自分类Dev

如何将MySQL REPLACE与变量一起使用?

Related 相关文章

  1. 1

    如何将动态分配与以迭代器作为参数的方法一起使用?

  2. 2

    如何将.htaccess与脱机html一起使用?

  3. 3

    如何将ArgumentOutOfRangeException与多个参数一起使用?

  4. 4

    如何将动态HTML与带有角度引导程序弹出窗口的指令一起使用?

  5. 5

    如何将构造函数与无参数的参数一起使用

  6. 6

    如何将参数与模型一起传递?

  7. 7

    Angular2-如何将路由器与动态网址一起使用

  8. 8

    如何将scrollview与动态高度的子视图一起使用?

  9. 9

    如何将jquery .data与动态添加的元素一起使用

  10. 10

    如何将ngOptions与包含HTML实体的字符串一起使用?

  11. 11

    我如何将 simple_html_dom 与 phantomjs 一起使用

  12. 12

    将Scrapyd与参数一起使用

  13. 13

    将params关键字与动态类型参数一起使用

  14. 14

    将data-i8n与动态参数一起使用

  15. 15

    在Struts 2中将ActionForward与动态参数一起使用

  16. 16

    如何将构建器模式与所有参数强制一起使用?

  17. 17

    如何将xpcall与具有参数的函数一起使用?

  18. 18

    如何将map与需要更多参数的函数一起使用

  19. 19

    如何将Url.Action与列表参数一起使用?

  20. 20

    如何将Mongoosejs的“查找”功能与可选参数一起使用?

  21. 21

    如何将parentNode与add / removeClass和<audio>的IF参数一起使用?

  22. 22

    如何将for_each与其他参数一起使用?

  23. 23

    如何将Source参数与Install-WindowsFeature一起使用

  24. 24

    如何将QProcess与参数中的变量一起使用?

  25. 25

    如何将setParameter(JPQL Namedquery)与多个参数一起使用

  26. 26

    如何在orderby子句中将LINQ与动态参数一起使用

  27. 27

    如何使输入与参数一起使用?

  28. 28

    如何将地图与休眠注释一起使用

  29. 29

    如何将MySQL REPLACE与变量一起使用?

热门标签

归档