.NET MVC3 Razor(VB!)扩展未在视图中导入?

时间:2011-01-25 01:57:47

标签: asp.net-mvc-3 razor

我的扩展程序未在我的vbhtml视图中导入。我似乎在某个地方遗失了什么......有人可以帮忙吗?

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")

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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

答案 2 :(得分:0)

您的module.vb需要位于 App_Code 目录中,并且应该按照上面的回答声明名称空间。