VB.NET和MVC 5使用内置帮助程序的自定义帮助程序而不使用App_Code

时间:2014-08-26 11:47:26

标签: c# asp.net asp.net-mvc vb.net asp.net-mvc-5

我正在使用VB.NET和EF 6开发一个MVC 5项目。我添加了一个依赖Custom Global Helpers的EditorTemplates nuget包。

在C#中我只能在public static class的任何地方添加新的帮助器,然后将命名空间添加到~/Views/Web.config然后关闭。据我所知,C#和VB.NET在这方面有很大不同。

在与编译器和Stack Overflow搜索进行了多次斗争之后,我发现如果将它们放在App_Code文件夹中,我可以让自定义助手在视图中工作。

我使用了一个模块,其中<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。

如果我错了,请纠正我。除了confirming the issue之外,似乎没有关于此在线的任何文档,然后忽略它超过5年。

我如何同时使用两者?我处于束缚之中,对微软的支持/文档​​失去了信心。

1 个答案:

答案 0 :(得分:2)

解决方案:

  1. 请勿使用App_Code。将帮助程序放在其他位置。我把它放在〜/ Helpers /
  2. 不要使用命名空间。这可能是我的垮台,但如果不进一步测试就无法确定。
  3. 将根项目命名空间添加到〜/ Views / Web.config

    <add namespace="MyProjectName" />
    

    不会

    <add namespace="MyProjectName.Helpers" />
    <add namespace="HtmlHelpers" />
    <add namespace="OrAnythingLikeThis" />
    
  4. 确保在构建时编译帮助程序(Class.vb&gt;属性&gt;构建操作:编译)
  5. 我99%肯定是这样的。我遇到了BootstrapEditorTemplates的问题,因为它们是C#,我在VB.NET中工作。为了解决这个问题,我将帮助器转换为VB.NET,并将它们全部放在〜/ Helpers /中的一个HtmlHelpers.vb文件中,与其他自定义文件一起放置。这样做可能并非都是必要的;你可以通过删除C#帮助文件中的命名空间来完成相同的操作,但我还没有测试过。

    如果这不起作用,请给我一个喊(在这个问题上,而不是下午),我会回来尝试解决它。​​