Свойство наследуемого интерфейса не найдено привязкой модели - PullRequest
7 голосов
/ 01 ноября 2011

Я озадачен этой проблемой, и я не уверен, является ли это моим непониманием структуры MVC, платформы .NET, или чем.Но некоторые объяснения из любого угла будут оценены здесь.

Что я пытаюсь сделать: использовать привязку модели ASP.NET MVC3 для визуализации элементов управления HTML в представлении.В частности, я пытаюсь привязать интерфейс, а не конкретный класс.

Ошибка: ArgumentException "Свойство [бла] не найдено."генерируется при загрузке страницы.

Код:

Interface IFoundation
{
  int Id { get; set; }
}

Interface IChild: IFoundation
{
  string Name { get; set; }
}

Class Concrete: IChild
{
  int Id { get; set; }
  string Name { get; set; }
}

Представление:

@model IChild
@Html.EditorFor(x => x.Id)

Когда я пытаюсь загрузить представление, ArgumentException выбрасывается извызовите EditorFor (), сообщив, что свойство Id не найдено.Однако, если я вместо этого связываюсь с классом Concrete, связывание работает нормально.

Так кто-нибудь знает, почему EditorFor () не сможет разрешить унаследованное свойство из базового интерфейса?

1 Ответ

8 голосов
/ 01 ноября 2011

В базовых / абстрактных и конкретных классах присутствуют свойства, методы и т. Д. Интерфейсы, с другой стороны, реализованы. Правила, налагаемые CLR.

См. Эту статью с объяснением привязки ModelBinding и этой разницы (интерфейс класса x).

http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html

Я думаю, что это ваш ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...