【问题标题】:MVCSiteMapProvider with Webforms带有 Web 表单的 MVSiteMapProvider
【发布时间】:2014-11-27 09:27:49
【问题描述】:

我继承了一个混合 MVC / Webforms 项目,MVC 部分使用 MVCSiteMapProvider 创建菜单,WebForm 部分使用自定义构建的菜单创建工具。

我刚刚创建了一些自定义 MVCSiteMapProvider 节点,并希望将整个 MVCSiteMapProvider 移植到项目的 webform 部分中。这可能吗?任何人都可以提出任何将其嵌入/入侵网络表单代码的策略吗?

谢谢 安迪

【问题讨论】:

    标签: c# asp.net asp.net-mvc webforms mvcsitemapprovider


    【解决方案1】:

    虽然理论上我们应该与 WebForms 具有工作互操作性,但据我所知,它尚未经过尝试甚至测试。但是,如果设置没有问题,我可能不会听说它。

    设置:

    • 添加一个在 ASP.NET 和 MvcSiteMapProvider 之间共享的 XML 文件,并在那里配置所有节点。确保使用 NuGet 包安装的 Mvc.sitemap 文件中的命名空间声明。请注意,您可以安全地添加 MvcSiteMapProvider 属性,它们将被 XmlSiteMapProvider 视为自定义属性(并且基本上被忽略)。为了能够在 WebForms 和 MVC 之间导航,您应该使用 url 属性而不是配置 controlleraction 等。
    • Webforms 将使用XmlSiteMapProvider 和所有使用它来显示菜单和站点地图路径的控件。基本上,就像使用 MSDN 文档作为指南的普通 ASP.NET 网站一样进行设置。
    • MVC 将使用 MvcSiteMapProvider 及其 HTML 助手来显示类似的功能。请注意,如果您需要满足您的要求,您可以自定义 HTML 帮助程序或构建您自己的帮助程序。
    • 对于安全修整,您可以将xmlRolesAttribute 用于 WebForms,并在 MVC 中使用 AuthorizeAttribute。
    • 对于本地化,您几乎可以关注MSDN documentation

    这基本上是默认 ASP.NET 站点地图提供程序具有的所有功能,因此在 WebForms 中工作时,您将无法访问可见性提供程序、动态节点提供程序或 MvcSiteMapProvider 的一些其他更高级的功能,除非你建立自己的System.Web.SiteMapProvider 来处理这些细节。

    由于没有 HTML 帮助程序回发,您也可以在 WebForm 中使用just writing the output of the Menu and SiteMapPath HTML helpers,尽管我怀疑这是否可行,因为 HTML 帮助程序是模板化的,这可能意味着它们只能在 MVC 中工作意见。构建您自己的 HTML 帮助程序来输出 HTML 甚至输出 ASP.NET 控件也是可能的,因为它们只是可以从 WebForms 调用的扩展方法。

    请通过打开new issue@GitHub 提供任何反馈。

    【讨论】:

    • 感谢您的帮助,我会告诉您进展如何。我尝试了 XMLSiteMapProvider 方法,该方法与我使用 MVCSiteMapProvider 来使用无法与 XMLSiteMapProvider 一起使用的动态节点和 CustomNodeProvider 不同。我会告诉你进展如何
    • 如何在 Web 表单页面中为 .Menu 使用 HtmlHelper?我只想捕获从 .Menu HTML Helper 输出的 HTML 并将其转储到 Web 表单母版页上,这样我就可以有一个统一的方法来生成菜单(远离 Web 表单)
    • 看看this question。这基本上描述了原理。但是,我相当肯定股票 MvcSiteMapProvider 菜单不适用于这种方法,因为它是一个 模板化 HTML 帮助程序,它依赖于 MVC 约定来工作。但是,您可以 create your own HTML helper 在其中编写 HTML,而不是依赖于模板。
    • 另外,看看this issue - 有一个自定义 HTML 帮助器的演示(尽管它是一个模板化的)。您只需要对Menu 进行逆向工程,而不是使用模板,而是让它写出与the templates 相同的HTML。
    【解决方案2】:

    您可以使用两个不同的站点地图文件。一个带有 XMLSiteMapProvider 的 web.sitemap 用于 webforms,另一个用于 MVC 部分 Mvc.Sitemap 和 MVCSiteMapProvider。对于 web 表单,请在 Mvc.SiteMap 中指定 url 而不是 action 和控制器。我目前在我们的混合项目中使用它并且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 2010-12-05
      • 2012-02-22
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多