gpt4 book ai didi

c# - MVC HtmlHelpers 的嵌套扩展方法

转载 作者:行者123 更新时间:2023-11-30 16:10:26 37 4
gpt4 key购买 nike

我想为我的 MVC Controller 嵌套一组扩展方法,我希望能够按以下模式调用

@Html.NestedName().CustomLabelFor(m => m.Field)

我注意到 TwitterBootstrapMVC 遵循这种模式,但我一直未能成功复制它。有人可以向我展示一个示例,说明我将如何构建我的扩展方法类吗?

目前我的顶级类(class)如下

    public static class BootstrapHtmlHelper
{
public static BootStrap Bootstrap(this HtmlHelper html)
{
return new BootStrap(html);
}
}

嵌套在 Bootstrap 类中我有以下方法

        public static MvcHtmlString CustomLabelFor <TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, string placeholder)
{
StringBuilder sb = new StringBuilder();
return new MvcHtmlString(sb.ToString());
}

显然这不能再是静态的了,但是我如何替换本来应该是“this”的内容,以便我的方法仍然有效?显然 TModel 和 TProperty 仍然是必需的,但我不确定如何将它们纳入范围?

最佳答案

你快到了。让我们把它分成两部分:

  1. 您需要一个静态类来容纳您的扩展方法 ( BootstrapHtmlHelper )。
  2. 您需要一个非静态类来容纳您的实例方法 ( BootStrap )

因此,您只需要将第二种方法更改为:

public MvcHtmlString CustomLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression, string placeholder)

此外,您还需要修改 BootStrap存储在扩展方法中传递的模型类型参数。所以声明BootStrap作为BootStrap<TModel>并在创建新的 BootStrap 时将其传入(即 new BootStrap<TModel>(html) )。

现在您应该可以根据需要调用它了:

@Html.Bootstrap().CustomLabelFor(m => m.Field)

(你有 @Html.NestedName() 但显然 NestedName 应该是 Bootstrap ,因为那是你的扩展方法的名称,对吧?)

关于c# - MVC HtmlHelpers 的嵌套扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818634/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com