2011-01-25 44 views
2

我的擴展沒有在我的vbhtml視圖中導入。我似乎在某處失去了一些東西..任何人都可以幫忙嗎?未導入視圖的.NET MVC3 Razor(VB!)擴展?

的module.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") 

回答

4

我是一個C#的傢伙,但是這應該是有效的VB爲好。 儘管如此,您可以通過Web.config添加擴展來代替。這樣你就不必在每個視圖中添加它們。 在您的Views文件夾下,您可以找到一個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> 
+0

這是行不通的。引發同樣的錯誤:'SelectUserGroup'不是'System.Web.Mvc.HtmlHelper'的成員。 – Ropstah 2011-01-25 02:15:13

+0

對不起,錯誤是:'SelectUserGroup'不是'System.Web.Mvc.HtmlHelper(Of MySite.Models.MyViewModel)'的成員。 MyViewModel被傳遞給視圖,並在視圖中也被引用(我更新了問題..) – Ropstah 2011-01-25 02:16:02

0

你module.vb需要在App_Code文件目錄,因爲它上面的回答命名空間應該聲明。

1

我認爲你需要裝飾功能而不是模型。我有類似的東西,它爲我工作,檢查了這一點:

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