Скаффолдинг ASP.NET MVC не работает со ссылочными моделями

У меня есть приложение ASP.NET MVC 3 (Razor), которое ссылается на сборку, где сборка представляет собой не что иное, как набор сущностей, которые я использую в своей бизнес-логике.

Я создаю строго типизированные представления, ссылаясь на сущности/модели, которые существуют в моей эталонной сборке BL. К сожалению, при таких ссылках на модели функция создания шаблонов не работает. В частности, MVC успешно создаст View, но не будет включать какие-либо шаблоны открытых свойств, которые находятся в модели, на которую ссылаются.

Единственный способ заставить строительные леса работать — это явно создать класс в каталоге Models, который наследуется от объекта, и явно определить свойства, подобные этому:

Пример модели

namespace MyMvcApplication.Models
{
    public class MyMvcModel: MyReferencedEntity
    {
        new public string Name { get { return base.Name; } }
        new public string Password { get { return base.Password; } }
        new public string Foo { get { return base.Foo; } }
        new public string Bar { get { return base.Bar; } }
    }
}

Теперь, если я буду ссылаться на приведенную выше модель при создании строго типизированного представления, функция формирования шаблонов будет отлично работать, и все будет хорошо.

Мой вопрос; Есть ли способ заставить строительные леса работать с View, который ссылается на класс, который не находится в каталоге Models, чтобы мне не приходилось воссоздавать класс, как в приведенном выше примере?


person Jed    schedule 06.02.2012    source источник
comment
С каким аспектом строительных лесов у вас возникли проблемы. Я попробовал описанный вами подход с использованием атрибута Required. И оба сценария сработали, как ожидалось?   -  person Stewart Ritchie    schedule 07.02.2012
comment
Аспект, в котором все общедоступные свойства модели добавляются в представление (например, @Html.LabelFor(model=›model.Name). Вместо создания элементов управления HTML для всех свойств моей модели единственное, что генерируется, это @Html.BeginForm() вместе с некоторыми элементами управления HTML, которые не имеют ничего общего с моей Моделью. Меня интересует тот факт, что это работает для вас - я должен спросить; добавлена ​​ли ваша сборка Модели в список ваших приложений? References — или ваша модель является классом, который находится внутри сборки вашего приложения?   -  person Jed    schedule 07.02.2012
comment
Сборка моей модели была добавлена ​​в справочники приложений MVC.   -  person Stewart Ritchie    schedule 07.02.2012
comment
@StewartRitchie - я только что создал новое решение, содержащее проект ASP.NET MVC и проект ClassLibrary. В проекте MVC я добавил ссылку на ClassLibrary. В проекте MVC я создал контроллер и строго типизированное представление, которое моделирует класс из библиотеки классов — скаффолдинг сработал! (так же, как вы упомянули). В моей сущности должно быть что-то, вызывающее проблемы, которые мне нужно будет обнаружить. Спасибо за ваш вклад - просто дайте мне знать, что это работает для вас, это помогло мне подойти к решению проблемы с другой точки зрения;)   -  person Jed    schedule 07.02.2012
comment
Можете ли вы опубликовать код, который не работает? Насколько мне известно, нет конкретных правил, согласно которым вы должны помещать свои классы моделей в папку «Модели».   -  person Stewart Ritchie    schedule 07.02.2012
comment
Хорошо, рад, что вы делаете успехи!   -  person Stewart Ritchie    schedule 07.02.2012
comment
Действительно прогрессирует. Похоже, что MVC Scaffolder игнорирует типы, которые являются универсальными списками, пользовательскими типами, членами и, возможно, еще чем-то, о чем я пока не знаю. В двух словах, это выглядит так, как будто он обрабатывает только Свойства, которые имеют примитивный тип значения. Однако все еще тестирую - я не уверен на 100% в том, что вижу.   -  person Jed    schedule 07.02.2012
comment
Да, вам нужно искать примеры Custom Binding.   -  person Stewart Ritchie    schedule 08.02.2012
comment
Дважды проверьте, являются ли ваши занятия общедоступными.   -  person Carlos Araujo    schedule 28.07.2016


Ответы (1)


Ну, я только что столкнулся с точно таким же сценарием. Я выполнил следующие шаги. Много поздно, но может быть полезно для других:

  • Выгрузите свой модельный проект
  • Перезагрузить его обратно
  • Построить типовой проект
  • Добавить ссылку на проект в проект модели из проекта веб-приложения
  • Попробуйте создать контроллер лесов.

Надеюсь это поможет!

person Debashish Saha    schedule 26.01.2019