【问题标题】:Zen barcode render with mvcZen 条码渲染与 mvc
【发布时间】:2018-01-09 12:57:22
【问题描述】:

我正在使用带有 MVC 的 Zen 条码框架,条码渲染得很好,但是由于在 Route.config 中添加了一个新的路由来支持条码

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
         Allow extensionless handling of barcode image URIs
        routes.Add(
            "BarcodeImaging",
            new Route(
               "Barcode/{id}",new BarcodeImageRouteHandler()));

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );


    }

问题是我的操作链接 URL 不再正常工作,它们使用条形码路由配置而不是默认的 MVC 路由

我的动作链接

 @Html.ActionLink("Edit", "Edit", "RequestTests",new { id=item.RequestTestID },null) |
        @Html.ActionLink("Invoice", "Details", new { id=item.RequestTestID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.RequestTestID })

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing barcode


    【解决方案1】:

    发生这种情况是因为您扩展了 MVC 的错误部分来处理路由。 IRouteHandler 只能处理传入 URL。

    相反,您应该继承RouteBaseRoute,它们能够处理传入和传出 URL。 RouteBase 有两种方法可以覆盖

    1. GetRouteData(HttpContextBase) 处理传入请求(通常将 URL 转换为路由值字典)
    2. GetVirtualPath(RequestContext, RouteValueDictionary) 处理传出请求(通常将路由值字典转换为 URL)

    此外,当路由不匹配当前请求时,这些方法中的每一个都必须返回null,以确保路由框架将尝试匹配路由表中的所有后续路由。这意味着它也是路由的工作来确定路由是否与请求匹配(可以使用if 语句完成)。

    UrlHelper 类和所有使用它的扩展方法,例如ActionLink 都使用GetVirtualPath() 方法来构建 URL,因此如果您希望这些方法中的任何一个起作用,则必须实现它。

    自定义 RouteBase 示例

    【讨论】:

      【解决方案2】:

      改成

              routes.Add(
                  "BarcodeImaging",
                  new Route(
                      "Barcode/{barcodeId}",
                      new BarcodeImageRouteHandler()));
      

      适合我

      【讨论】:

        猜你喜欢
        • 2018-01-13
        • 1970-01-01
        • 2011-05-03
        • 2012-06-08
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        相关资源
        最近更新 更多