VB.NET和MVC 5使用带有内置帮助程序的自定义帮助程序,并且没有App_Code
本文关键字:帮助程序 自定义 Code App 内置 MVC NET VB | 更新日期: 2023-09-27 18:19:30
我正在使用VB.NET和EF 6进行MVC 5项目。我添加了一个EditorTemplates nuget包,它依赖于自定义全局帮助程序。
在C#中,我只能在任何位置添加新的助手作为public static class
,然后将名称空间添加到~/Views/Web.config
,然后就可以了。据我所知,C#和VB.NET在这里有很大的不同。
在与编译器和Stack Overflow搜索进行了大量斗争后,我发现如果将自定义助手放在App_Code文件夹中,我可以让它们在视图中工作。
我使用了一个Module,其中<System.Runtime.CompilerServices.Extension>
属性应用于每个方法。然后添加到~/Views/Web.config
和App_code文件夹并编译。
Imports System.Web.Mvc
Public Module HtmlHelpers
<System.Runtime.CompilerServices.Extension>
Public Function HelperName(ByVal helper As HtmlHelper, hn As HelperName) As MvcHtmlString
Return MvcHtmlString.Create(hn.ToString())
End Function
End Module
这允许我使用新的自定义帮助程序,但完全屏蔽了所有内置的html帮助程序,如DisplayFor、EditorFor和ActionLink。
如果我错了,请纠正我。网上似乎没有任何关于这件事的文件,除了确认了这个问题,然后忽略了它5年多。
如何同时使用两者?我已经到了山穷水尽的地步,对微软的支持/文档失去了信心。
解决方案:
- 不要使用App_Code把助手放到其他地方。我把我的投了~/帮助者/
- 请勿使用命名空间这可能是我的失败,不过如果没有进一步的测试就无法确定
-
将根项目命名空间添加到~/Views/Web.config
<add namespace="MyProjectName" />
不
<add namespace="MyProjectName.Helpers" /> <add namespace="HtmlHelpers" /> <add namespace="OrAnythingLikeThis" />
- 确保在构建时编译助手(Class.vb>属性>构建操作:编译)
我有99%的把握。我使用BootstrapEditorTemplates时遇到了问题,因为它们是C#,我在VB.NET中工作。为了解决这个问题,我将帮助程序转换为VB.NET,并将它们与其他自定义帮助程序一起放在~/helpers/中的一个HtmlHelpers.VB文件中。这样做可能并不完全必要;您可能只需删除C#助手文件中的名称空间就可以实现同样的目的,但我还没有测试过。
如果这不起作用,那就喊我一声(关于这个问题,而不是下午),我会回来尝试解决它。