.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 каталоге и пространствах имен, должны быть объявлены, как было сказано выше.