несколько моделей в представлении .NET Core - PullRequest
0 голосов
/ 03 июня 2019

Я использую ядро ​​Asp.net 2.2.В A я хочу добавить две модели и пройтись по ним, но я не знаю, как это сделать.Это моя ProductCategory модель домена

public class ProductCategory
{
    public int ProductCategoryID { get; set; }
    public string ProductCategoryName { get; set; }
}

А это моя Product модель домена

public class Product
{
     public int ProductID { get; set; }
     public string ProductName { get; set; }
     public int ProductCategoryID{ get; set; }

     [ForeignKey("ProductCategoryID")]
     public virtual ProductCategory ProductCategory{ get; set; }
}

Теперь я хочу добавить их вПредставление (или представление и множественное частичное представление), подобное этому: MyView architecture

И, как подсказывает эта статья , я не хочуиспользовать доменные модели в виде модель / представление. Как вы решаете эту проблему?Сначала я подумал, что это хорошая идея - сначала MyView загружает ProductCategories, а затем различные частичные представления загружают продукты.Но таким образом я должен жестко кодировать модель каждого частичного.Я хочу сделать его динамичным, поэтому, когда администратор добавляет категорию и ее продукты, контроллер добавляет их динамически в MyView.Если у вас есть проблемы с пониманием моей идеи, просто сообщите мне, чтобы предоставить вам необходимую информацию, как вы хотите.Потому что я не знаю, какая информация необходима для этого поста.

Так что, когда я проектирую MyView , я могу сделать что-то вроде этого (просто макет и абстрактное представление о том, что яхочу сделать.)

@foreach(var p in model.ProductCategory)
{
    <div>
       <h1>p.ProductTypeName</h1>
        @foreach(var c in model.Product)
        { 
           c.ProductName
        }

    </div>


}

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Я не хочу использовать доменные модели в модели представления / представлении

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

public class MyViewModel
{
  public IEnumerable<Product> Products {get; set;}
  public ProductCategory ProductCategory {get; set;} 
}

Приведенный пример является простым.Вы можете настроить это в соответствии со своими потребностями (я имею в виду конкретные поля, которые вы хотите отобразить), и иметь только те поля в вашей модели представления.Мало того, теперь вы можете использовать DataAnnotations в вашей модели вида, например

public class MyViewModel
{
  [Display(Name="My Products")]
  public IEnumerable<Product> Products {get; set;}
  public ProductCategory ProductCategory {get; set;} 
}
1 голос
/ 03 июня 2019

Вам нужно ViewModel, как показано ниже:

public class MyPageProductVM 
{
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public int ProductCategoryID { get; set; }
}
public class MyPageProductCategoryVM 
{
    public int ProductCategoryID { get; set; }
    public string ProductCategoryName { get; set; }

    public IList<MyPageProductVM> { get; set; }
}

Ваш вид теперь может использовать IList<MyPageProductCategoryVM> в качестве модели. Конечно же, вы можете создать еще один класс MyPageVM, содержащий список и любые дополнительные поля, и заставить представление использовать MyPageVM в качестве модели.

Я считаю, что это не то, что вам нужно, но для полноты, другой вариант - денормализовать модели предметной области:

public class MyPageProductVM 
{
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public int ProductCategoryID { get; set; }

    public int ProductCategoryID { get; set; }
    public string ProductCategoryName { get; set; }
}

Вы можете использовать такую ​​библиотеку, как AutoMapper или Mapster, для сопоставления моделей доменов с моделями представления.

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