MVCSiteMapProvider 不会对菜单使用 Razor 模板

MVCSiteMapProvider won't use Razor Templates for Menu

我现在很喜欢通过 Nuget 使用制作精良的 MVCSiteMapProvider,但我遇到了障碍。

我正在尝试修改 @Html.MvcSiteMap().Menu() 助手的模板。我正在修改的文件是 ..\Views\Shared\DisplayTemplates\MenuHelperModel.cshtml,无论我对文件进行什么更改,呈现时模板都不会更新。

我用 notepad++ 完成了“全部查找”,发现 MvcSiteMapProvider.dll 中有两个模板,一个用于经典 asp.net,一个用于 Razor。很明显,正在调用 .dll 文件中的模板 - 但如何才能避免这种情况?

尽管模板位于 ..\Views\Shared\DisplayTemplates\ 中,但该网站配置为使用不同的文件夹来显示视图。可能值得一提。

编辑:如果我将模板名称传递给助手,仍然没有效果。

模板化助手是 MVC 创建的,而不是 MvcSiteMapProvider 之一。我强烈怀疑您的问题是由于重新配置您的 Views 文件夹引起的。 MVC does not support a way to reconfigure your templates folder.

但正如接受的答案中指出的那样,可以将它们放在 ~/Views/CurrentController/DisplayTemplates/ 下。您可以使用该功能将模板放入新配置的文件夹中。不过,这意味着您需要为每个控制器添加模板副本。

最好的解决方案是不要更改 MVC 文件夹的默认设置。

如果这不是一个选项,您可以考虑 rolling your own Menu HTML helper based on the code from the current one returns HtmlString 而不是使用模板。

模板化的助手更好,因为您可以在部署后编辑代码(这就是我们这样做的原因),但它附带一个警告,您必须依赖 MVC 的默认文件夹结构才能使用它们.