Это было изменение в ASP.NET MVC 3, которое я уже довел до сведения Microsoft (этот сценарий работал на ASP.NET MVC 1 и 2).
Вот их официальный ответ:
Привет, Дарин (и другие),
Это было преднамеренное изменение, которое мы ввели в ASP.NET MVC 3, чтобы
был результатом компромисса между лучшей поддержкой
унаследованные модели или лучшая поддержка моделей, которые реализуют
интерфейсы. В итоге мы предпочли унаследованные модели, которые от наших
опыт - более распространенный подход.
Основная проблема заключается в том, что когда интерфейс реализуется
класс, который класс не на самом деле наследует ни один из членов
интерфейс. Ключевым моментом здесь является то, что, поскольку он не наследует
члены интерфейса, он также не наследует метаданные на
эти члены.
Спасибо, команда ASP.NET
Теперь к делу
Должны ли мы использовать конкретные модели на наших видах?
Не обязательно. Вы по-прежнему можете использовать интерфейсы в основных видах, но затем иметь шаблоны редактора / отображения с конкретными типами. Во время выполнения, основываясь на фактическом типе модели представления, платформа выберет правильный шаблон, в котором у вас будет конкретный тип, и разрешит свойство Id.
Другая возможность состоит в том, чтобы использовать абстрактные классы вместо интерфейсов (я знаю :-), как правило, Microsoftish)