.NET MVC3 Razor (VB!) Расширения, не импортированные в поле зрения?

Мои расширения не импортируются в мое представление vbhtml. Кажется, что-то что-то упускает. Может ли кто-нибудь помочь?

Модуль .vb:

Imports System.Runtime.CompilerServices

Namespace Areas.Admin.Models.Extensions
<Extension()> _
Public Module InputExtensions
    Public Function SelectHumanGroup(ByVal helper As HtmlHelper, ByVal name As String, Optional ByVal selectedValue As String = "", Optional ByVal htmlAttributes As Object = Nothing) As MvcHtmlString
        Return helper.DropDownList(name, repo.GetGroups(), htmlAttributes)
    End Function
End Module
End Namespace

View.vbhtml:

@Imports MySite.Areas.Admin.Models.Extensions
@ModelType MySite.Models.MyViewModel

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2>


@Html.SelectHumanGroup("test")

Ответ 1

Я парень С#, но это также должно быть справедливо для VB. Лучше хотя бы добавить свои расширения через Web.config. Таким образом, вам не нужно добавлять их во все виды. В папке "Представления" вы найдете Web.Config. Найдите и добавьте:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="MySite.Areas.Admin.Models.Extensions" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Ответ 2

Я думаю, вам нужно украсить функцию, а не модель. У меня что-то похожее, и это работает для меня, проверьте это:

Imports System.Runtime.CompilerServices

Namespace Areas.Admin.Models.Extensions
Public Module InputExtensions
    <Extension()> _
    Public Function SelectHumanGroup(ByVal helper As HtmlHelper, ByVal name As String, Optional ByVal selectedValue As String = "", Optional ByVal htmlAttributes As Object = Nothing) As MvcHtmlString
        Return helper.DropDownList(name, repo.GetGroups(), htmlAttributes)
    End Function
End Module
End Namespace

Ответ 3

Ваш модуль .vb NEED должен находиться в App_Code каталоге и пространствах имен, должны быть объявлены, как было сказано выше.