【问题标题】:VB.NET and MVC 5 using custom helpers with in-built helpers and no App_CodeVB.NET 和 MVC 5 使用带有内置帮助器且没有 App_Code 的自定义帮助器
【发布时间】:2014-10-19 17:40:28
【问题描述】:

我正在使用 VB.NET 和 EF 6 开发一个 MVC 5 项目。我添加了一个依赖于自定义全局帮助程序的 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 年。

如何同时使用?我已经走到了尽头,对 Microsoft 的支持/文档​​失去了信心。

【问题讨论】:

  • 谁对这个问题投了反对票和近距离投票。非常感谢您提供一些见解,说明为什么这不是一个有效的问题,或者为什么您认为它应该被删除。而不是进一步试图阻止我在没有提供理由的情况下找到解决方案。
  • 您是否尝试过首先在自己的库中而不是 App_Code 中编译您的帮助程序?我是用 VBnet 编写的所有者助手,但没有看到这个问题。然而,我在我编译的单独项目中有我的助手。
  • 不,我没试过这个。我是否将它们添加到单独的类库项目中,然后从解决方案和 web.config 中引用它们?除此之外,我还有什么需要注意的吗?干杯,马特。
  • 我设法找到了解决方案/解决方法。我要清理一下,找出我到底做了什么来修复它,然后我会发布解决方案。
  • 是的,你可以创建一个单独的项目来保存你的助手,编译,然后添加引用,你应该很高兴。

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


【解决方案1】:

解决方案:

  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 > 属性 > 构建操作:编译)

我 99% 确定就是这样。我遇到了 BootstrapEditorTemplates 的问题,因为它们是 C# 并且我在 VB.NET 中工作。为了解决这个问题,我将帮助程序转换为 VB.NET,并将它们全部放在 ~/Helpers/ 中的单个 HtmlHelpers.vb 文件中,以及我的其余自定义文件。这样做可能并非全部必要。您可能只需删除 C# 帮助文件中的命名空间即可完成相同的操作,但我尚未测试。

如果这不起作用,请大声告诉我(关于这个问题,而不是下午),我会回来尝试解决它。​​

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多