创建视图中可用的自定义助手

2024-06-28

我有太多文本实用方法,例如MakeShortText(string text, int length), RemoveTags(string text), TimeAgo(DateTime date)和别的。 我想从单独的助手访问它们,如下一个示例所示:

@Text().MakeShortText(Model.Text, 10)

是否可以创建这样的扩展?或者我必须像这样为 HtmlHelper 进行扩展:

@Html.Text().MaksShortText(Model.Text, 10)

?


您可以从定义自定义开始TextHelper:

public class TextHelper
{
    public TextHelper(ViewContext viewContext)
    {
        ViewContext = viewContext;
    }

    public ViewContext ViewContext { get; private set; }
}

然后让你的所有方法都是这个的扩展方法TextHelper:

public static class TextHelperExtensions
{
    public static IHtmlString MakeShortText(
        this TextHelper textHelper, 
        string text,
        int value
    )
    {
        ...
    }
}

然后你可以定义一个自定义网页:

public abstract class MyWebViewPage<T> : WebViewPage<T>
{
    public override void InitHelpers()
    {
        base.InitHelpers();
        Text = new TextHelper(ViewContext);
    }

    public TextHelper Text { get; private set; }
}

然后在你的~/Views/web.config (not in ~/web.config)使用以下命令将此自定义网页配置为 Razor 视图的基页pageBaseType属性:

<pages pageBaseType="AppName.Web.Mvc.MyWebViewPage">
    <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
    </namespaces>
</pages>

然后在您的观点中您将能够使用:

@Text.MakeShortText(Model.Text, 10)

如果您想使用问题中所示的以下语法:

@Text().MakeShortText(Model.Text, 10)

只需修改自定义视图引擎即可Text不是一个属性,而是一个方法,它将返回一个实例TextHelper。或者甚至返回HtmlHelper实例,这样您就不需要将现有的扩展方法移动到TextHelper:

public abstract class MyWebViewPage<T> : WebViewPage<T>
{
    public HtmlHelper Text()
    {
        return Html;
    }
}

第二种语法也是可能的:

@Html.Text().MaksShortText(Model.Text, 10)

简单定义一个自定义Text()扩展为HtmlHelper class:

public static class HtmlExtensions
{
    public static TextHelper Text(this HtmlHelper htmlHelper)
    {
        return new TextHelper(htmlHelper.ViewContext);
    }
}

然后与第一种情况相同的方式,您可以将自定义方法作为此方法的扩展方法TextHelper class.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建视图中可用的自定义助手 的相关文章

  • 将 Google 云端硬盘访问权限委派给服务帐户失败

    我参与构建了一个内部使用的应用程序 用户可以通过该应用程序上传文件 并将其存储在 Google Drive 中 由于建议不要使用服务帐户作为文件所有者 因此我希望代表公司系统管理员有权访问的指定用户帐户上传应用程序 我已经创建了该应用程序以
  • pop() 期间提升 Fibonacci 堆访问冲突

    Context 我目前正在实现某种形式的 A 算法 我决定使用 boost 的斐波那契堆作为底层优先级队列 我的图表是在算法运行时构建的 作为我使用的顶点对象 class Vertex public Vertex double double
  • 使用“对‘boost::system::get_system_category()’的未定义引用”链接到 boost barfs

    我在静态链接使用 boost 1 35 库的应用程序时遇到问题 我使用的是 Linux debian Lenny box 带有 G 4 3 2 链接无 static工作顺利 具体来说 g Wall Wextra pedantic ggdb3
  • 共享库 C++ Makefile

    我需要编译胖二进制文件才能在另一台 Linux 机器上使用它 但缺少一些库 因此据我了解 我应该使用一些 shared 选项来编译它 但我不明白如何为此配置 Makefile 目前我的 makefile 如下所示 CC g CC FLAGS
  • 如何使用 lstat() 确定是否为硬链接

    我的操作系统是linux 我用 C 编程 我知道我可以使用 lstat 来识别软链接 即使用 S ISLNK st st mode 但我如何识别该链接是硬链接呢 如果链接是硬链接 它将被视为常规文件 但是 我还想区分常规文件和硬链接 有什么
  • 在 C 中使用模板函数的最短示例?

    我如何处理函数echo tpl可以采取1类型参数int or string 然后打印出来 C没有模板 我认为你能做的最好的事情就是使用联合或让函数具有不同的名称 后一种具有不同名称的方法是准标准方法 例如fabs fabsf fabsl a
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux
  • C# 中的 memcpy 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 C memcpy 等效项 https stackoverflow com questions 510971 c memcpy equivalent 相当于什么memcpyC 中的函数 正如已经说过的
  • 无符号长十六进制表示

    include
  • Unix 编程。不确定如何使用 passwd 结构

    我做了一些研究 但仍在努力解决passwd结构 http www opengroup org onlinepubs 000095399 basedefs pwd h html http www opengroup org onlinepub
  • CMake include_directories 和 add_subdirectories 之间的区别?

    我正在学习 CMake 来构建 C 代码 并努力解决以下概念 在我的根级目录中 我有一些 cpp 文件和 CMakeLists txt 它们在 gen cpp 目录中成功生成了一些 thrift 代码 我的根级别 CMakeLists tx
  • 使用自定义对象的动态列表并且无法动态更改dataGrid的单元格属性

    我刚开始在 Stack 上发帖 我已经搜索了很长一段时间来解决与我类似的问题 我试图根据对象的布尔值动态地将 WinForms DataGridView 中的复选框从非只读更改为只读 它在调试模式下显示更改已经发生 但是一旦完全运行 应该只
  • NHibernate 继承 - 判别器值

    NHibernate 是否可以有一个像这样工作的判别器 如果值等于 String Empty gt Class1 其他 gt Class2 我已经有一个 CultureName 字符串列 我想将其用作鉴别器 我不想添加额外的布尔列 如果 C
  • 开始学习 C# 的最佳方式是什么?

    我对 vb 6 有一点编程经验 而 vb net 则不多 请告诉我成为专家 C 程序员的最佳方法 我知道这需要很长时间 想想你如何学习人类语言 阅读 写作 口语和听力 阅读代码 阅读文章 阅读示例 当您更有经验时 请查看您使用的一些项目的源
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 网页上的富文本编辑器

    我正在尝试在我的网页中添加一个富文本编辑器 用户可以在其中撰写评论并格式化他们所写的内容 类似于我们在此网站上撰写帖子的编辑器 谁能指出我关于此的正确方向 任何可以帮助我构建这样一个组件的教程 我还想要一个免费的产品 忘记之前提到 类似的东
  • 在 Linux 上用 C 跟踪键盘和鼠标事件

    如何在 Linux 中用 C 语言跟踪键盘或鼠标事件 Like for example if the user presses ESC Shift etc I should be able to track it Same way for
  • 如何使用 Dictionary 属性序列化对象?

    在下面的示例代码中 我得到了这个error 元素 TestSerializeDictionary123 Customer CustomProperties 呕吐型 System Collections Generic Dictionary
  • 使用 CRTP 模式时继承中的不明确方法

    我正在定义一个DoubleWrapper类继承自两个 CRTP 基类 Ratioable and Divable 两者都定义operator 具有不同的签名 T operator double const scalar const retu

随机推荐

  • 执行源代码时忽略导入错误

    我有一个应用程序 它读取 python 中的测试脚本并将其通过网络发送以在远程 python 实例上执行 由于控制程序不需要运行这些脚本 我不想将测试脚本使用的所有模块安装在控制器的 python 环境中 然而 控制器确实需要来自测试脚本的
  • C# 中带有复选框的 TreeView

    我在 C 中有一个带有复选框的树视图 我希望当用户检查一个节点时 自动检查以下级别上的所有节点 有谁知道如何做到这一点 而无需在每次用户检查某个节点时在所有树上运行递归功能 Thanks 该函数返回树视图 public TreeView G
  • SQL 用逗号替换点

    我有以下代码 SELECT cast Listenpreis 1 19 as decimal 29 2 as Listenpreis FROM SL M03KNE dbo ARKALK 我得到这个值 5 59 我尝试将点替换为 komma
  • Qt QPushButton 样式表悬停

    我有以下按钮样式表 QPushButton hover background qlineargradient x1 0 y1 0 x2 0 y2 1 stop 0 0 ffd9aa stop 0 5 ffbb6e stop 0 55 fea
  • 在 PHP 中你使用复数还是单数来命名你的数组? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当我命名数组类型变量时 我经常遇到一个困境 我使用复数还是单数命名我的数组 例如 假设我有一个名称数组 在 PHP 中我会说 names arr
  • Kubernetes 在 AWS-EBS 上创建 PersistentVolumeClaim 失败

    我使用以下命令设置了一个包含四个 EC2 实例的 Kubernetes 集群kubeadm Kubernetes 集群工作正常 但当我尝试创建PersistentVolumeClaim 首先我创建了一个StorageClass使用以下 YA
  • WPF 数据触发器和故事板

    当视图模型 演示模型繁忙时 我试图触发进度动画 我有一个 IsBusy 属性 并将 ViewModel 设置为 UserControl 的 DataContext 当 IsBusy 属性为 true 时 触发 progressAnimati
  • 暂停 Web Audio API 声音播放

    如何为我的音频创建暂停功能 我的下面的脚本中已经有一个播放函数 http pastebin com uRUQsgbh http pastebin com uRUQsgbh function loadSound url var request
  • 如何正确并行化严重依赖 I/O 的作业

    我正在构建一个必须处理大量数据的控制台应用程序 基本上 应用程序从数据库获取引用 对于每个引用 解析文件的内容并进行一些更改 这些文件是 HTML 文件 该过程正在使用 RegEx 替换进行繁重的工作 查找引用并将其转换为链接 然后结果存储
  • 如何订阅所有进程的PROCESS_STATE_RUNNING事件

    我在用着主管的事件框架 http supervisord org events html订阅由 Supervisor 管理的进程的事件 我的事件监听器 processlistener py 看起来像这样 import sys from su
  • 在express中设置静态javascript文件的内容类型

    我在用express使用 es6 模块提供带有 js 文件的页面 关于 es6 模块 https jakearchibald com 2017 es modules in browsers https jakearchibald com 2
  • 有没有办法在不同选项卡之间隔离“localStorage”?

    我目前正在使用 window localStorage 在浏览器上存储一些客户端数据 但我想将此存储隔离到各个选项卡 有办法实现这一点吗 你应该考虑使用会话存储 https developer mozilla org en US docs
  • Flexslider 在循环后停在第一张幻灯片处

    我试图让 Flexslider 进行完整循环 然后在返回到第一张幻灯片后停止或暂停 到目前为止 这是我的代码 window load function flexslider flexslider animation slide animat
  • 打印字符串有困难

    当我运行该程序时 第二个printf prints string2与扫描到的任何内容string1附在最后 e g 123被扫描到string1然后它打印 Is before 12ab123 相对于12ab 为什么不只是 12ab char
  • 测试舵图模板

    有没有办法测试模板是否适用于所有可能的值 注意 这与 helm 测试不同 helm 测试用于通过作业中运行的任意代码来测试已部署的图表 我想要实现的是迭代一组值并检查每个值生成的 K8s 资源 假设我们要测试您的图表是否正确编写 图表 值
  • 格式化浮点值,保留 2 位小数[重复]

    这个问题在这里已经有答案了 如何将结果四舍五入到小数点后两位并将其显示在结果标签上 我发现了一些陈述 但我对 Swift 很陌生 实际上我很难为我的项目重建示例 import UIKit class ViewController UIVie
  • 在 docker 中为 docker golang api 的容器设置端口

    我期待使用 docker golang api 做下面这样的事情 cmd docker run t i p 8989 8080 image name bin bash 我也在使用golang sdkhttps github com moby
  • 如何在 Spring Boot Health 中添加自定义健康检查?

  • 如何创建独立的电梯 Web 应用程序?

    如何制作独立的电梯应用程序 使用哪些工具 库 与在某些应用程序服务器中使用 lift 应用程序作为战争相比 性能如何 使用 onejar maven 插件http onejar maven plugin googlecode com svn
  • 创建视图中可用的自定义助手

    我有太多文本实用方法 例如MakeShortText string text int length RemoveTags string text TimeAgo DateTime date 和别的 我想从单独的助手访问它们 如下一个示例所示