C# MVCSiteMapProvider与Webforms

C# MVCSiteMapProvider与Webforms,c#,asp.net,asp.net-mvc,webforms,mvcsitemapprovider,C#,Asp.net,Asp.net Mvc,Webforms,Mvcsitemapprovider,我继承了一个混合的MVC/Webforms项目,MVC部分使用MVCSiteMapProvider创建菜单,WebForm部分使用定制的菜单创建工具 我刚刚创建了一些定制的MVCSiteMapProvider节点,并希望将整个MVCSiteMapProvider移植到项目的webform部分。这可能吗?有人能提出一些策略来将其嵌入到Web表单代码中吗 谢谢 Andy虽然理论上我们应该与WebForms具有工作互操作性,但据我所知,它还没有经过尝试甚至测试。但是,如果设置它没有问题,我可能不会听说

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

我刚刚创建了一些定制的MVCSiteMapProvider节点,并希望将整个MVCSiteMapProvider移植到项目的webform部分。这可能吗?有人能提出一些策略来将其嵌入到Web表单代码中吗

谢谢
Andy

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

要设置它,请执行以下操作:

  • 添加一个在ASP.NET和MvcSiteMapProvider之间共享的XML文件,并在其中配置所有节点。确保使用NuGet包安装的Mvc.sitemap文件中的名称空间声明。请注意,您可以安全地添加MvcSiteMapProvider属性,XmlSiteMapProvider只会将它们视为自定义属性(基本上忽略)。为了能够在WebForms和MVC之间导航,您应该使用
    url
    属性,而不是配置
    controller
    action
  • Webforms将使用和所有使用它的控件来显示菜单和SiteMapPath。基本上,将其设置为使用MSDN文档作为指南的普通ASP.NET网站
  • MVC将使用MvcSiteMapProvider及其HTML助手来显示类似的功能。请注意,如果需要满足您的需求,您可以自定义HTML帮助程序或构建自己的帮助程序
  • 对于安全性调整,可以使用For WebForms和MVC中的authorized属性
  • 对于本地化,您几乎可以按照以下步骤进行操作
这基本上是默认ASP.NET站点地图提供程序所具有的所有功能,因此您无法访问可见性提供程序、动态节点提供程序、,或者在WebForms中使用MvcSiteMapProvider的其他一些更高级的功能,除非您构建了自己的
System.Web.SiteMapProvider
,可以处理这些细节

由于没有HTML帮助程序发回,您可能也能够在WebForm中逃脱,尽管我怀疑这是否有效,因为HTML帮助程序是模板化的,这可能意味着它们只在MVC视图中工作。构建自己的HTML帮助程序来输出HTML甚至输出ASP.NET控件也是可能的,因为它们只是可以从WebForms调用的扩展方法


请打开@GitHub提供任何反馈。

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

感谢您的帮助,我会让您知道它是如何运行的。我尝试了XMLSiteMapProvider方法,该方法与我使用MVCSiteMapProvider来使用动态节点和CustomNodeProvider的方法不同,后者不适用于XMLSiteMapProvider。我会让你知道你是如何在网页表单页面中使用HtmlHelper for.菜单的?我只想捕获从.Menu HTML帮助程序输出的HTML,并将其转储到web窗体母版页,这样我就可以有一个统一的方法来生成菜单(远离web窗体)了。这基本上描述了原理。但是,我相当肯定stock
mvcsitemprovider
菜单不能使用这种方法,因为它是一个模板化的HTML帮助程序,依赖于MVC约定。但是,你可以在里面编写HTML,而不是依赖于模板。另外,看看-有一个自定义HTML助手的演示(尽管它是一个模板化的)。您只需要对进行反向工程,而不是使用模板,使其写出与之相同的HTML。