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年多。

如何同时使用两者?我已经到了山穷水尽的地步,对微软的支持/文档失去了信心。

VB.NET和MVC 5使用带有内置帮助程序的自定义帮助程序,并且没有App_Code

解决方案:

  1. 不要使用App_Code把助手放到其他地方。我把我的投了~/帮助者/
  2. 请勿使用命名空间这可能是我的失败,不过如果没有进一步的测试就无法确定
  3. 将根项目命名空间添加到~/Views/Web.config

    <add namespace="MyProjectName" />
    

    <add namespace="MyProjectName.Helpers" />
    <add namespace="HtmlHelpers" />
    <add namespace="OrAnythingLikeThis" />
    
  4. 确保在构建时编译助手(Class.vb>属性>构建操作:编译)

我有99%的把握。我使用BootstrapEditorTemplates时遇到了问题,因为它们是C#,我在VB.NET中工作。为了解决这个问题,我将帮助程序转换为VB.NET,并将它们与其他自定义帮助程序一起放在~/helpers/中的一个HtmlHelpers.VB文件中。这样做可能并不完全必要;您可能只需删除C#助手文件中的名称空间就可以实现同样的目的,但我还没有测试过。

如果这不起作用,那就喊我一声(关于这个问题,而不是下午),我会回来尝试解决它。