MVCSiteMapProvider with Webforms

本文关键字:Webforms with MVCSiteMapProvider | 更新日期: 2023-09-27 18:32:08

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

我刚刚创建了一些自定义的MVCSiteMapProvider节点,并希望移植整个MVCSiteMapProvider以用于项目的Webform部分。这可能吗?任何人都可以建议任何将其楔入/黑客到网络表单代码的策略吗?

谢谢安 迪

MVCSiteMapProvider with Webforms

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

要设置它:

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

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

由于没有 HTML 帮助程序回

发,您也可以只在 WebForm 中编写菜单和 SiteMapPath HTML 帮助程序的输出,尽管我怀疑这会起作用,因为 HTML 帮助程序是模板化的,这可能意味着它们只能在 MVC 视图中工作。构建自己的输出 HTML 甚至输出 ASP.NET 控件的 HTML 帮助程序也是可能的,因为它们只是可以从 WebForms 调用的扩展方法。

请通过打开新问题 @ GitHub 提供任何反馈。

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