HtmlHelper有两个通用参数?

时间:2015-02-24 21:55:54

标签: c# generics html-helper

好的,所以我现在有一个类似的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中)提供额外的Generic类型参数,而不必将其存储在变量中以显示它?即@Html.BackLink<TM>(...)

1 个答案:

答案 0 :(得分:1)

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

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