自定义 HtmlHelper 扩展方法在视图中不可用?

2023-12-03

我翻译了耶利米·克拉克的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 name As String, ByVal listInfo As List(Of ListItem), ByVal htmlAttributes As Object) As String
    Return htmlHelper.CheckBoxList(name, listInfo, DirectCast(New RouteValueDictionary(htmlAttributes), IDictionary(Of String, Object)))
  End Function

  <Extension()> _
  Public Function CheckBoxList(ByVal htmlHelper As HtmlHelper, ByVal name As String, ByVal listInfo As List(Of ListItem), 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 HtmlHelper 扩展方法在视图中不可用? 的相关文章

随机推荐

  • 如何在C#中删除注册表值

    我可以使用 Microsoft Win32 Registry 类获取 设置注册表值 例如 Microsoft Win32 Registry SetValue HKEY CURRENT USER Software Microsoft Wind
  • 为我的条形码阅读器读取和写入数据到缓冲区的最佳方法是什么?

    我需要用 C 语言为 Linux 的条形码阅读器编写一个驱动程序 条形码阅读器通过串行总线工作 当我向条形码阅读器发送一组命令时 条形码阅读器应该向我返回状态消息 我设法配置端口并创建信号处理程序 在信号处理程序中 我读取串行总线接收的数据
  • 如何搜索在 Json 中注册为数组的日期?

    如何搜索在 Json 中注册为数组的日期 PostgreSQL 是数据库 下面是相关代码 1 Model class Business db Model tablename business id db Column db Integer
  • GitHub api 获取最后 N 次提交

    是否可以使用 GitHub API 获取 GitHub 存储库中特定分支的最后 N 次提交 我刚刚发现了一些关于提交的 GitHub api 详细信息here 但他们都没有提供有关最后 N 次提交的详细信息 任何人都可以对此提供更好的想法吗
  • 具体详细说明了 NSUserDefaultsDidChangeNotification 上的默认值已更改的内容

    我开始进入 NSUserDefaults 的内部密室 现在我可以使用提供的选择器加上 NSNotification 对象作为参数成功拦截 NSUserDefaultsDidChangeNotification 通知 然而 返回的 NSNot
  • R-lang:如果等于引号,则删除第一个字符

    R新手 我正在尝试从数据框中的行的开头和结尾删除 如果引号不是第一个或最后一个字符 我不想删除 我不确定为什么以下内容不适用于我的数据的数据框 其中每一行都是文本的数据点 引号并不是字符串 而是文本的一部分 数据框的一行看起来像这样 x l
  • 在 bash 中获取当前日期而不生成子进程

    这个问题纯粹是好奇心 通过运行以下命令很容易获得日期date来自 bash 的命令 但它是一个外部可执行文件 需要生成一个子进程 我想知道是否可以在没有子进程的情况下获取当前时间 日期的格式 我只能在以下上下文中找到对日期 时间格式的引用P
  • RabbitMQ 消费者过载

    我一直在阅读有关 AMQP 消息传递确认的原理 https www rabbitmq com confirms html 确实很有帮助且写得很好的文章 但有关消费者致谢的一个特别的事情确实令人困惑 以下是引用 使用自动确认模式时需要考虑的另
  • MYSQL中递归存储过程获取分层数据的性能

    我有餐桌员工 员工 emp id int 主键 emp name varchar 50 mngr id int 这里 mngr id 要么为 null 要么包含有效的 emp id 这样就形成了组织中员工的层次结构 为了遍历整个层次结构 我
  • Tomcat - UnsupportedClassException

    我在 Tomcat Web 应用程序中部署已编译的类时遇到问题 我正在部署一个要从 servlet 调用的类 但是当我运行该应用程序时 它无法告诉我一个ServletException Error allocating the servle
  • 需要 VSCode sendSequence 键绑定来执行上一个命令、下一个命令、移动到行首、移动到行尾终端命令

    我当前的自定义键绑定 key alt b command workbench action terminal sendSequence when terminalFocus args text u0017 key alt j command
  • 求解线性方程。使用 numpy 的三个变量[重复]

    这个问题在这里已经有答案了 我目前需要一门课程 它必须能够显示和求解如下所示的方程系统 2x 4y 4z 8 34x 3y z 30 x y z 108 我认为编写一个类将方程系统的左侧事物转换为类似矩阵的对象是一个好主意 这是该系统的自制
  • 最大并发 Socket.IO 连接数

    这个问题以前曾被问过 但最近没有被问过 也没有明确的答案 使用 Socket io 在需要添加另一台服务器之前 是否存在可以维持的最大并发连接数 有谁知道有哪些活跃的生产环境正在大规模使用 websockets 特别是 socket io
  • 如何在 ClickHouse 中向可执行 UDF 发送多个参数?

    我有一个输出输入的 python 脚本 usr bin python3 import sys if name main i 0 for line in sys stdin print i line end sys stdout flush
  • MySql REGEXP 运算符

    mySql REGEXP 运算符不区分大小写 该运算符是否有一个版本is区分大小写 Use the BINARY关键字 这迫使REGEXP将字符串匹配为二进制字符串 区分大小写 SELECT a REGEXP A a REGEXP BINA
  • Apache:禁用目录中的 php

    我想在我的服务器上的目录中禁用 php 我认为在 httpd conf 中设置 Options ExecCGI 会阻止执行 php 脚本 但显然我错了 所以 这就是我的 httpd conf 中的内容 它显然不起作用
  • ImportError:无法从“sklearn.base”导入名称“MultiOutputMixin”

    我只想用 scikit learn 进行线性回归 当我尝试导入线性模型包时 出现标题中的错误消息 我尝试遵循类似问题的解决方案 link 该建议基本上是删除请求 MultipleOutputMixin 的代码部分 当我这样做时 MultiO
  • 如何截取 YouTube 屏幕截图

  • 当用户关闭窗口选项卡时 JavaScript 发出警报

    我希望当用户关闭选项卡或窗口时 或者当他尝试移动到与我的站点不同的另一个位置时 弹出一个确认框 并且如果他确认执行 ajax 脚本 然后关闭或更改窗口 我不知道该怎么做 PS 我正在使用 jQuery window unload funct
  • 自定义 HtmlHelper 扩展方法在视图中不可用?

    我翻译了耶利米 克拉克的MVC 的复选框列表助手进入我的 VB Net 项目 但是当我尝试使用我认为的方法时 出现错误 CheckBoxList is not a member of System Web Mvc HtmlHelper Of