2011-02-03 2 views
1

У меня есть следующий метод:Используя интерфейс на HTML помощник ASP.NET MVC

public static string UlList(this HtmlHelper helper, List<IEntity> entities, string css) 
{ 
    return "foo"; 
} 

Однако, когда я пытаюсь и вызвать метод

<%= Html.UlList(Model.ProfileRequiredFields, css)%> 

я получаю:

Compiler Сообщение об ошибке: CS1928: «System.Web.Mvc.HtmlHelper» не содержит определения для «UlList» и лучший метод перегрузки »System.Web.Mvc.HtmlHelpers.UlList (System.Web.Mvc.HtmlH elper, System.Collections.Generic.List, строка)»имеет некоторые недопустимые аргументы

Model.RequiredFields = new List<ProfileRequiredField>(); 

public class ProfileRequiredField : IEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

EDIT Я использую 3.5

ответ

1

Что вы пытаетесь сделать с List<IEntity> как тип параметра, работает только в .NET 4.0 из-за нового ключевого слова out.

Если вам это нужно, чтобы работать в более низких версиях, попробуйте следующее:

public static string UlList<T>(this HtmlHelper helper, List<T> entities, string css) 
    where T : IEntity 
{ 
    return "foo"; 
} 

Это заменяет IEntity с общим аргументом. .NET автоматически решит это для вас, поэтому вам не нужно добавлять <ProfileRequiredField> в свой код.

+0

ОК, так что я не могу использовать это Net 3.5. Это не обязательно должен быть метод расширения. – frosty

+0

Нет, вы не можете использовать 'List ' в 3.5. Вышеупомянутое с общим является специально, чтобы сделать эту работу в 3.5 :). Уточнил ответ. –

-1

Пожалуйста, убедитесь, что ваш метод расширения в System.Web. Mvc, или укажите ваше пространство имен в списке пространств имен, определенных в файле web.config.

+1

-1 Нет. Компилятор уже видит метод, иначе он бы не обнаружил, что аргументы неверны. –

+0

Вычитание точки немного банально. Это абсолютно правильная вещь, чтобы проверить. Возможно, было несколько версий расширения, написанных в разных пространствах имен, для всех, что вы знали. – Xhalent

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