这是一个非常简单的场景:
public class StockItemController : Controller
{
public ActionResult Index(int categoryId)
{
/// ...
}
}
样本航线:
/StockItem吗?categoryId=1//应该是"饮料"/StockItem吗?categoryId=1//应该是"Shoes"
以下是缩略的站点地图:
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Template" action="Index" controller="StockItem" dynamicNodeProvider="uTani.UI.Common.BreadCrumbCategoryProvder, Store.UI" />
和类的部分:
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
foreach (Category category in _repository.GetCategories())
{
string key = "Category" + category.Id;
string title = category.DescriptionRU;
DynamicNode node = new DynamicNode(key, title);
node.RouteValues.Add("categoryId", category.Id);
yield return node;
}
}
这一切所做的是用@Html.MvcSiteMap().Menu()
正确地生成网站菜单,但问题是@Html.MvcSiteMap().SiteMapPath()
(breadcrumb)总是显示第一个动态节点,无论路由是什么…
我不知道我在这里错过了什么,没有足够的文档。有没有人有样品或可以指出我做错了什么?
谢谢,
斯坦
in father preservedRouteParameters="id"
我明白了。日志含义没有带categoryId参数的路由,链路为"/StockItem?categoryId=1"。这是有效的,但抛出站点地图,因为它预期"/StockItem/Category/1",因为没有人,它返回第一个节点。我只是把public ActionResult Index(int categoryId)
改为public ActionResult Index(int id)
,一切都开始工作了…
斯坦