将具有泛型参数的静态方法转换为泛型类

用户名

我有以下html辅助方法:

public static MvcHtmlString CustomEditorFor<TModel, TProperty>(this HtmlHelper<TModel> helper,
        Expression<Func<TModel, TProperty>> expression, 
        EditorOptions options,
        object htmlAttributes)
{
}

我需要将其移动到以这种方式构造的帮助程序库中:

public class HtmlHelperExenion
{
    public static Custom(this HtmlHelper helper)
    {
        return new HelperFactory(helper);
    }
}

public class HelperFactory
{
    internal HtmlHelper HtmlHelper { get; set; }
    public HelperFactory(HtmlHelper htmlHelper)
    {
        this.HtmlHelper = htmlHelper;
    }

    public virtual EditorBuilder CustomEditorFor( parameters from static MvcHtmlString static method above go here)
    {
        return new EditorBuilder( parameters go here );
    }
}

我无法弄清楚如何构造我的HelperFactory类和EditorBuilder类构造函数以正确处理泛型。

这是我尝试过的,但没有成功:

public static HelperFactory<TModel, TProperty> Custom<TModel, TProperty>(this HtmlHelper<TModel> helper)
{
    return new HelperFactory<TModel, TProperty>(helper);
}

public class HelperFactory<TModel, TProperty> : HelperFactory
{
    public HtmlHelper<TModel> HtmlHelper { get; set; }

    public HelperFactory(HtmlHelper<TModel> htmlHelper)
        : base((HtmlHelper)htmlHelper)
    {
        this.HtmlHelper = htmlHelper;
    }

    public virtual EditorBuilder<TModel, TProperty> CustomEditorFor(Expression<Func<TModel, TProperty>> expression,
EditorOptions options,
object htmlAttributes)
    {
        return new EditorBuilder<TModel, TProperty>(this.HtmlHelper,
                   expression,
                   options,
                   htmlAttributes);
    }
}

public class EditorBuilder<TModel, TProperty>
{
    public EditorBuilder(HtmlHelper<TModel> helper,
        Expression<Func<TModel, TProperty>> expression,
        EditorOptions options,
        object htmlAttributes)
    {

    }

}

最终目标是能够以这种方式使用它:@ Html.Custom()。CustomEditorFor(model => model.Property)

任何帮助将不胜感激。

詹姆士

你并不遥远,只是改变你HelperFactory采取TModel这样你就可以把它绑通用HtmlHelper,使CustomEditorFor通用的,因此它可以接受任何TProperty

public class HelperFactory<TModel>
{
    public HelperFactory(HtmlHelper<TModel> htmlHelper)
    {
        this.HtmlHelper = htmlHelper;
    }

    public HtmlHelper<TModel> HtmlHelper { get; private set; }

    public virtual EditorBuilder<TModel, TProperty> CustomEditorFor<TProperty>(Expression<Func<TModel, TProperty>> expression, EditorOptions options, object htmlAttributes)
    {
        return new EditorBuilder<TModel, TProperty>(this.HtmlHelper,
                   expression,
                   options,
                   htmlAttributes);
    }
}

然后,您需要做的就是更新扩展方法

public static class HtmlHelperExt
{
    public static HelperFactory<TModel> Custom<TModel>(this HtmlHelper<TModel> helper)
    {
        return new HelperFactory<TModel>(helper);
    }
}

所以对于像这样的模型

public class MyModel
{
    public int Id { get; set; }
    ...
}

用法看起来像

@model MyModel

@Html.Custom().CustomEditorFor(x => x.Id, EditorOptions.Option1, null)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将类转换为具有泛型的接口

来自分类Dev

有没有一种方法可以将类强制转换为具有特定参数的类java.lang.Class <>泛型?

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

将具有多个继承的泛型类句柄转换为基类(即接口)

来自分类Dev

Java:具有泛型方法的泛型类

来自分类Dev

具有静态方法的泛型

来自分类Dev

具有不同类型泛型参数的方法的泛型类

来自分类Dev

将Swift泛型类转换为具有类型别名的协议

来自分类Dev

无法将具有泛型方法的功能接口转换为lambda表达式

来自分类Dev

泛型类中的泛型静态方法

来自分类Dev

泛型类和静态泛型方法

来自分类Dev

Delphi泛型:无法将类和构造函数约束的泛型类型转换为接口

来自分类Dev

将C泛型参数转换为函数指针

来自分类Dev

将C泛型参数转换为函数指针

来自分类Dev

将泛型类转换为其他类型

来自分类Dev

将引用转换为C#中的泛型类

来自分类Dev

将泛型类转换为父 C#

来自分类Dev

使用反射将未知对象转换为泛型类

来自分类Dev

具有泛型构造函数的泛型类?

来自分类Dev

转换为泛型

来自分类Dev

在具有不同泛型参数的抽象类中返回泛型是不好的做法

来自分类Dev

使泛型类的函数仅接受具有相同泛型类型但受更多约束的参数

来自分类Dev

如何使用已知类型作为参数创建具有泛型的泛型类?

来自分类Dev

Swift 转换为具有约束的泛型类型

来自分类Dev

具有类参数的泛型类型推断

来自分类Dev

如何在C#中将具有泛型类型的类转换为具有作为泛型类型的对象的类

来自分类Dev

从泛型转换为泛型

来自分类Dev

转换为基础泛型类

Related 相关文章

  1. 1

    无法将类转换为具有泛型的接口

  2. 2

    有没有一种方法可以将类强制转换为具有特定参数的类java.lang.Class <>泛型?

  3. 3

    C#泛型类作为参数,与泛型类的调用方法具有相同的T

  4. 4

    C#泛型类作为参数,与泛型类的调用方法具有相同的T

  5. 5

    将具有多个继承的泛型类句柄转换为基类(即接口)

  6. 6

    Java:具有泛型方法的泛型类

  7. 7

    具有静态方法的泛型

  8. 8

    具有不同类型泛型参数的方法的泛型类

  9. 9

    将Swift泛型类转换为具有类型别名的协议

  10. 10

    无法将具有泛型方法的功能接口转换为lambda表达式

  11. 11

    泛型类中的泛型静态方法

  12. 12

    泛型类和静态泛型方法

  13. 13

    Delphi泛型:无法将类和构造函数约束的泛型类型转换为接口

  14. 14

    将C泛型参数转换为函数指针

  15. 15

    将C泛型参数转换为函数指针

  16. 16

    将泛型类转换为其他类型

  17. 17

    将引用转换为C#中的泛型类

  18. 18

    将泛型类转换为父 C#

  19. 19

    使用反射将未知对象转换为泛型类

  20. 20

    具有泛型构造函数的泛型类?

  21. 21

    转换为泛型

  22. 22

    在具有不同泛型参数的抽象类中返回泛型是不好的做法

  23. 23

    使泛型类的函数仅接受具有相同泛型类型但受更多约束的参数

  24. 24

    如何使用已知类型作为参数创建具有泛型的泛型类?

  25. 25

    Swift 转换为具有约束的泛型类型

  26. 26

    具有类参数的泛型类型推断

  27. 27

    如何在C#中将具有泛型类型的类转换为具有作为泛型类型的对象的类

  28. 28

    从泛型转换为泛型

  29. 29

    转换为基础泛型类

热门标签

归档