MVCSiteMapProvider with Webforms
本文关键字:Webforms with MVCSiteMapProvider | 更新日期: 2023-09-27 18:32:08
我继承了一个混合的MVC/Webforms项目,MVC部分使用MVCSiteMapProvider来创建菜单,WebForm部分使用自定义构建的菜单创建工具。
我刚刚创建了一些自定义的MVCSiteMapProvider节点,并希望移植整个MVCSiteMapProvider以用于项目的Webform部分。这可能吗?任何人都可以建议任何将其楔入/黑客到网络表单代码的策略吗?
谢谢安 迪
尽管理论上我们应该与WebForms具有工作互操作性,但据我所知,它还没有被尝试过,甚至还没有经过测试。但是,如果设置它没有问题,我可能不会听说过它。
要设置它:
- 添加在 ASP.NET 和 MvcSiteMapProvider 之间共享的单个 XML 文件,并在其中配置所有节点。请确保使用 NuGet 包安装的 Mvc.sitemap 文件中的命名空间声明。请注意,您可以安全地添加 MvcSiteMapProvider 属性,XmlSiteMapProvider 将将它们视为自定义属性(并且基本上被忽略)。为了能够在 WebForms 和 MVC 之间导航,您应该使用
url
属性,而不是配置controller
、action
等。 - Webforms将使用XmlSiteMapProvider以及所有使用它来显示菜单和SiteMapPath的控件。基本上,使用 MSDN 文档作为指南,像普通 ASP.NET 网站一样设置它。
- MVC将使用MvcSiteMapProvider及其HTML帮助程序来显示类似的功能。请注意,您可以自定义 HTML 帮助程序或构建自己的帮助程序(如果这是您需要满足要求的)。
- 对于安全修整,您可以使用 WebForms 的 xmlRolesAttribute 和 MVC 中的 AuthorizeAttribute。
- 对于本地化,您几乎可以按照 MSDN 文档进行操作。
这基本上是默认 ASP.NET 站点地图提供程序具有的所有功能,因此在WebForms中工作时,您将无法访问可见性提供程序,动态节点提供程序或MvcSiteMapProvider的其他一些更高级的功能,除非您构建自己的System.Web.SiteMapProvider
可以处理这些详细信息。
发,您也可以只在 WebForm 中编写菜单和 SiteMapPath HTML 帮助程序的输出,尽管我怀疑这会起作用,因为 HTML 帮助程序是模板化的,这可能意味着它们只能在 MVC 视图中工作。构建自己的输出 HTML 甚至输出 ASP.NET 控件的 HTML 帮助程序也是可能的,因为它们只是可以从 WebForms 调用的扩展方法。
请通过打开新问题 @ GitHub 提供任何反馈。
您可以使用两个不同的站点地图文件。一个web.sitemap带有XMLSiteMapProvider用于Webforms,另一个用于MVC Part Mvc.Sitemap与MVCSiteMapProvider。对于网络表单,请在 Mvc.SiteMap 中指定 url 而不是操作和控制器。我目前正在我们的混合项目中使用它,效果很好。