2015-02-24 3 views
0

Хорошо, так что я в настоящее время имеют HtmlHelper как-так: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 - это объект, который ее реализует (по крайней мере, в использовании).

Я пробовал второй бит кода и после многих попыток сделать универсальные версии всех моих общих вещей только для того, чтобы понять, что преобразования между вещами (несмотря на кажущееся простое) были непростыми.

Возможно ли предоставить дополнительный параметр типа Generic для HTML-помощника (в Razor) без необходимости его сохранения в переменной для его отображения? то есть @Html.BackLink<TM>(...)

ответ

1

Вы не можете частично вывести общие параметры. Так как у вас нет каких-либо параметров, которые позволяют компилятору вывести параметр TM типа, вам необходимо указать как общие параметры:

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

Это разочаровывает меня, но все же значительно лучше, чем головная боль я прошел сегодня с все не общие и преобразования. Спасибо за быстрый ответ. (Я соглашусь, как только это позволит мне). – Shelby115

Смежные вопросы