2013-06-14 2 views
0

В настоящее время я пишу переопределения для предоставления собственных реализаций элементов управления MVC. Я хотел бы работать с дополнительными параметрами, поэтому он сохраняет мне работу по написанию и поддержанию нескольких переопределений, как я решил это сейчас.Параметр Params при использовании необязательных параметров

Пример моего звонка

public static MvcHtmlString MyControlFor<TModel, TValue>(this HtmlHelper<TModel> html 
                 , Expression<Func<TModel, TValue>> expression 
                 , object htmlAttributes = null 
                 , params Expression<Func<TModel, object>>[] expressions) 

При работе с дополнительными параметрами и не предоставляя им все, мне нужно работать с именованными параметрами. Я также знаю, что в этом случае вам нужно передать объект массива параметру params для работы. Но здесь я не могу понять, как я могу это сделать.

вызов следующего дает мне следующую ошибку (CS0826: Нет лучший типа найден неявно типизированный массив):

@Html.MyControlFor(x => x.property, expressions: new [] { x=>x.property2, x=>x.property3 }); 

пропускание сильного массива типа, кажется, не являются решением, поскольку слишком компилятор не распознает класс Expression. Таким образом, следующее не работает

@Html.MyControlFor(x => x.property 
       , expressions: new Expression<Func<TModel, object>>[] { x=>x.property2, x=>x.property3 }); 

Есть ли у кого-нибудь идеи, как я могу это сделать? Или я обречен продолжать работать с переопределениями?

+0

Включить System.Linq? Мне кажется, что это должно сработать. Мне интересно, существует ли выражение в другом месте в пространстве имен как нечто совершенно другое. Однако я не знаком с MVC. – Mark

+0

Ваша строго типизированная версия должна работать. По крайней мере, он компилируется с моей Visual Studio 2012 без ошибок. Вы сказали, что компилятор не распознает класс Expression, у вас есть «using System.Linq.Expressions;» в вашем коде? –

ответ

0

причина, почему вы не можете добавить пространство имен System.Linq на вид бритвы, потому что бритва на основе динамического типа и пространство имен System.Linq содержит только методы расширения. Из-за того, что тип динамика известен только во время выполнения, вы не можете использовать методы расширения на нем.

0

Вы можете добавить с помощью заявления на вид Razor так:

@using System.Linq.Expressions 
+0

У меня нет ссылки на System.Linq of System.Linq.Expressions. Кажется, я не могу добавить его в мой взгляд (синтаксис бритвы) –

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