2

これは非常に単純なシナリオです。

public class StockItemController : Controller
{
    public ActionResult Index(int categoryId)
    {
    /// ...
    }
}

サンプルルート:

/StockItem?categoryId=1 // "飲料" にする必要があります /StockItem?categoryId=1 // "靴" にする必要があります

簡略化されたサイト マップは次のとおりです。

  <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()(ブレッドクラム)がルートに関係なく常に最初の動的ノードを表示することです...

ここで何が欠けているのかわからず、これに関する十分なドキュメントがありません..誰かがサンプルを持っているか、私が間違っていることを指摘できますか?

ありがとう、

-スタン

4

2 に答える 2

1

父のpreservedRouteParameters="id"

于 2012-01-10T12:55:01.690 に答える
0

私はそれを考え出した。categoryId パラメーターを持つルートはなく、リンクは "/StockItem?categoryId=1" でした。それはうまくいきましたが、「/StockItem/Category/1」を期待していたため、サイトマップを捨てていました。誰もいなかったので、最初のノードを返していました..私は単に変更public ActionResult Index(int categoryId)してpublic ActionResult Index(int id)、すべてが機能し始めました...

-スタン

于 2011-08-26T00:29:45.087 に答える