asp.net-mvc – 自定义HtmlHelper扩展方法在View中不可用?
发布时间:2020-12-16 07:37:45 所属栏目:asp.Net 来源:网络整理
导读:我已将Jeremiah Clark的 CheckBoxList Helper for MVC翻译成我的VB.Net项目,但当我尝试在我的视图中使用该方法时,我得到了错误 'CheckBoxList' is not a member of 'System.Web.Mvc.HtmlHelper(Of Attenda.Stargate.Web.UserRolesViewModel)'. 谁能告诉我哪
我已将Jeremiah Clark的
CheckBoxList Helper for MVC翻译成我的VB.Net项目,但当我尝试在我的视图中使用该方法时,我得到了错误
'CheckBoxList' is not a member of 'System.Web.Mvc.HtmlHelper(Of Attenda.Stargate.Web.UserRolesViewModel)'. 谁能告诉我哪里出错了? 助手模块: Imports System.Runtime.CompilerServices Public Module InputExtensions <Extension()> _ Public Function CheckBoxList(ByVal htmlHelper As HtmlHelper,ByVal name As String,ByVal listInfo As List(Of ListItem)) As String Return htmlHelper.CheckBoxList(name,listInfo,DirectCast(Nothing,IDictionary(Of String,Object))) End Function <Extension()> _ Public Function CheckBoxList(ByVal htmlHelper As HtmlHelper,ByVal listInfo As List(Of ListItem),ByVal htmlAttributes As Object) As String Return htmlHelper.CheckBoxList(name,DirectCast(New RouteValueDictionary(htmlAttributes),ByVal htmlAttributes As IDictionary(Of String,Object)) As String If String.IsNullOrEmpty(name) Then Throw New ArgumentException("The argument must have a value","name") End If If listInfo Is Nothing Then Throw New ArgumentNullException("listInfo") End If If listInfo.Count < 1 Then Throw New ArgumentException("The list must contain at least one value","listInfo") End If Dim sb As New StringBuilder() For Each info As ListItem In listInfo Dim builder As New TagBuilder("input") If info.Selected Then builder.MergeAttribute("checked","checked") End If builder.MergeAttributes(Of String,Object)(htmlAttributes) builder.MergeAttribute("type","checkbox") builder.MergeAttribute("value",info.Value) builder.MergeAttribute("name",name) builder.InnerHtml = info.Text sb.Append(builder.ToString(TagRenderMode.Normal)) sb.Append("<br />") Next Return sb.ToString() End Function End Module 查看来源: <%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/TwoColumn.Master" Inherits="System.Web.Mvc.ViewPage(Of Attenda.Stargate.Web.UserRolesViewModel)" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Edit User Roles </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Edit Roles for <%=Html.Encode(Model.User.UserName)%></h2> <div> <%=Html.CheckBoxList("Roles",Model.Roles)%> </div> </asp:Content> <asp:Content ID="Content3" ContentPlaceHolderID="cphLeftPanel" runat="server"> </asp:Content> 解决方法
您需要将包含自定义帮助程序类的命名空间导入到视图页面中.您可以在页面本身或所有页面的web.config文件中执行此操作.首先将代码放入命名空间.
<%@ Import Namespace="MyProject.Extensions" %> 或(在web.config中) <pages> ... <namespaces> ... <add namespace="MyProject.Extensions" /> </namespaces> </pages> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- jqGrid,ASP.NET,JSON让我发疯.请帮忙
- Blazor——Asp.net core的新前端框架
- asp.net – 占位符/示例文本在用户的文本框中
- ASP.NET MVC,ActionFilters,静态类和传递数据
- 从ASP.NET Web API中删除XML中的命名空间
- 认证 – 支持个人用户帐户和组织帐户在MVC5 / ASP.Net身份2
- asp.net-mvc-3 – ASP.Net MVC 3多个CheckBoxLists
- asp.net-2.0 – 我想阻止ASP.NET GridView对enter按钮做出反
- ASP.NET Core MVC 过滤器的使用方法介绍
- asp.net-mvc-3 – MVC 3 WebGrid – 可以进行内联编辑吗?