gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:39:26 26 4
gpt4 key购买 nike

我有以下 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 这样你就可以将它绑定(bind)到通用 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)

关于c# - 将具有泛型参数的静态方法转换为泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333986/

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