具有两个通用参数的 HtmlHelper?

HtmlHelper with two generic parameters?

好的,所以我现在有一个 HTMLHelper 这样的:

public static MvcHtmlString BackLink<TVM>(this HtmlHelper<TVM> helper, ...) 
    where TVM : VM

// Usage:
@Html.BackLink(...)

有没有办法做到这一点,同时保持上面的用法?

public static MvcHtmlString BackLink<TVM, TM>(this HtmlHelper<TVM> helper, ...) 
    where TVM : VM<TM> // Where VM<TM> : ISaveState<TM>

// Usage:
@{ String link = Html.BackLink<TM>(...); }
@link

// Doesn't work :(
@Html.BackLink<TM>(...)

VM 是 VM 的非通用版本。 ISaveState 是 ISaveState 的非通用版本,其中 TVM 是实现它的对象(至少在使用中)。

我已经尝试了第二位代码,在多次尝试制作我所有通用内容的非通用版本之后才意识到事物之间的转换(尽管看起来很简单)并不简单。

是否可以向 HTML Helper(在 Razor 中)提供额外的通用类型参数,而不必将其存储在变量中以显示它?即 @Html.BackLink<TM>(...)

您不能部分推断通用参数。由于您没有任何参数可以让编译器推断 TM 类型参数,因此您需要指定两个通用参数:

// Usage:
@{ String link = Html.BackLink<TVM,TM>(...); }