0

私の MVC プロジェクトでしばらく剣道をうまく使用してきましたが、ImageResizer も追加することにしました。ImageResizer と MvcRoutingShim を nuget 経由でインストールすると、剣道メニューが壊れてしまいました。それはかなり基本的なメニューです:

Html.Kendo().Menu().Name("Menu").BindTo(Html.MvcSiteMap(provName).Provider.RootNode.ChildNodes,
                  mappings => mappings.For<MvcSiteMapNode>(binding => binding
                      .ItemDataBound((item, node) =>
                      { 
                              item.ActionName = node.Action;
                              item.ControllerName = node.Controller;
                              item.RouteValues.Add("area", node.Area);
                      })
                          .Children(node => node.ChildNodes)))
              .Render();

しかし、実行しようとすると、

The method or operation is not implemented

例外として、次のスタック トレースがあります。

at System.Web.HttpContextBase.get_Items()
   at ImageResizer.Plugins.MvcRoutingShim.StopRoutingRoute.GetRouteData(HttpContextBase httpContext)
   at System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext)
   at Kendo.Mvc.Infrastructure.Implementation.RouteDataCache.RouteDataFactory(String url)
   at Kendo.Mvc.Infrastructure.Implementation.RouteDataCache.<GetRouteData>c__AnonStorey1B.<>m__26()
   at Kendo.Mvc.Infrastructure.Implementation.NoCache.Get[T](String key, Func`1 defaultValueFactory)
   at Kendo.Mvc.Infrastructure.Implementation.RouteDataCache.GetRouteData(String key, String url)
   at Kendo.Mvc.Infrastructure.Implementation.AuthorizationContextCache.GetAuthorizationContext(RequestContext request, String controllerName, String actionName, RouteValueDictionary routeValues)
   at Kendo.Mvc.Infrastructure.Implementation.ControllerAuthorization.IsAccessibleToUser(RequestContext requestContext, String controllerName, String actionName, RouteValueDictionary routeValues)
   at Kendo.Mvc.Infrastructure.Implementation.NavigationItemAuthorization.IsAccessibleToUser(RequestContext requestContext, INavigatable navigationItem)
   at Kendo.Mvc.UI.NavigatableExtensions.IsAccessible(INavigatable item, INavigationItemAuthorization authorization, ViewContext viewContext)
   at Kendo.Mvc.UI.NavigationItemContainerExtensions.WriteItem[TComponent,TItem](TItem item, TComponent component, IHtmlNode parentTag, INavigationComponentHtmlBuilder`1 builder)
   at Kendo.Mvc.UI.Menu.<WriteHtml>c__AnonStorey71.<>m__1FC(MenuItem item)
   at Kendo.Mvc.Extensions.EnumerableExtensions.Each[T](IEnumerable`1 instance, Action`1 action)
   at Kendo.Mvc.UI.Menu.WriteHtml(HtmlTextWriter writer)
   at Kendo.Mvc.UI.WidgetBase.Render()
   at Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.Render()
   at ASP._Page_Views_Shared__Layout_cshtml.Execute() in c:\Code\StandardProject\4.4.3.0\Server\MVC\CoBRAMVC4Portal\Views\Shared\_Layout.cshtml:line 60
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.WebPages.WebPageBase.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer)
   at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
   at System.Web.WebPages.WebPageBase.Write(HelperResult result)
   at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body)
   at System.Web.WebPages.WebPageBase.PopContext()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)

imageresizer で動作するように剣道を取得した人はいますか?

4

1 に答える 1

1

Kendo は MvcRoutingShim からルート データを要求しているようですが、機能しない HttpContextBase インスタンスを提供しています。

MvcRoutingShim は context.Items にアクセスできることを期待していますが、ここで NotImplementedException をスローしています。

ファイルは /Core.Mvc/StopRoutingRoute.cs にあります。

    public override RouteData GetRouteData(System.Web.HttpContextBase httpContext) {
        if (httpContext.Items[_contextItemsFlag] != null)
            return new RouteData(this, new StopRoutingHandler());
        return null;
    }

それをに変更する

    public override RouteData GetRouteData(System.Web.HttpContextBase httpContext) {
        try{
           if (httpContext.Items[_contextItemsFlag] != null)
                return new RouteData(this, new StopRoutingHandler());
        }catch(NotImplementedException){}

        return null;
    }

副作用を引き起こすことなく問題を解決する必要があります。残念ながら、HttpContextBase は、try/catch なしで NotImplementedException を「回避」する方法を提供していません。型の比較は脆弱であり、ユニット テストを中断します。

于 2012-09-24T05:26:40.637 に答える