0

この問題について何時間も考えてきましたが、XML サイト マップ機能は URL 属性を持つ外部 URL を受け入れるように更新されましたが、その機能は DynamicNode を介した動的定義に拡張されていないように見えます。

メニューを共有するいくつかのアプリケーションがあるため、これらのメニュー項目に対して単一の定義が必要であり、それぞれがイントラネット内のアプリケーションの 1 つを指しています。現在、(ASP.NET 用に) XML ファイルを各アプリケーションに展開する必要があるカスタム サイト マップを使用しています。MVC 実装で項目を動的に (おそらくデータベースから) 読み取る必要があります。

DynamicNode には URL プロパティがないため、パスが仮想であり、他のプロパティ (コントローラー、アクション、ルート) に基づいていることが明らかに必要です。「HTTP」の「アクション」を調べるために UrlResolver を実装しようとしましたが、これは機能し、URL を変更せずに返しました。しかし、私は恐ろしいものを受け取ります

http://site.com/Appは有効な仮想パスではありません。」

エラー。作成者が 3.1.0 で XML プロパティに導入した変更は、動的な同等物に変換されていないようです。誰でも私を助けることができますか?これは、デフォルトのクラスを拡張するために私が書いたコードです。このコードは実行され、正常に動作します。ResolveUrl が HTTP を返した後、エラーが発生するので、何かが足りないか、実行できないと思います。

   public class DynamicSiteMapNodeProvider : DynamicNodeProviderBase
    {
        override public IEnumerable<DynamicNode> GetDynamicNodeCollection()
        {
            var nodes = new List<DynamicNode>();
            nodes.Add(new DynamicNode
                {
                    Key = "Dynamic1",
                    Title = "Dynamic One!",
                    Action = "http://my.site.com/MyApp"

                });
            return nodes;

        }
    }

    public class FlexibleSiteMapUrlResolver: DefaultSiteMapNodeUrlResolver
    {
        public override string ResolveUrl(MvcSiteMapNode mvcSiteMapNode, string area, string controller, string action, IDictionary<string, object> routeValues)
        {
            // when action value is clearly a web site url, simply accept it.
            if (action.Substring(0, 5).ToLower() == "http:")
            {
                return action;
            }
            return base.ResolveUrl(mvcSiteMapNode, area, controller, action, routeValues);
        }
    }

2013/5/15: これを手伝ってくれる人はいませんか?

4

1 に答える 1