ASP.NET Core 2.2: основная модель макета - PullRequest
0 голосов
/ 10 мая 2019

У меня есть основной макет в проекте ASP.NET Core 2.2, который использует модель (как и другие представления) для создания уникального дизайна всего веб-сайта, каждое из моих представлений использует разные модели, но все они должны загружаться в одном файле макета. , Как я могу передать разные модели разным представлениям, в то время как мой макет ожидает одну модель?

Я не хочу создавать тонны файлов макетов для каждой группы представлений

для визуализации:

Product.cshtml (модель продукта) ==> _Layout.cshtml (модель продукта)

Category.cshtml (модель категории) ==> _Layout.cshtml (модель категории)

Но _Layout.cshtml ожидает только одну модель

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

В настоящее время нет способа получить _Layout.cshtml для двух разных моделей.

Лучшее, что вы можете сделать, - это создать базовую модель, например

   public class LayoutModel
   {
     public string LayoutFieldA { get; set; }
   }

Тогда ваша страницамодели могут наследовать базовую модель, как показано ниже

   public class ProductModel : LayoutModel
   {
     public string ProductFieldA { get; set; }
   }


   public class CategoryModel : LayoutModel
   {
     public string CategoryFieldA { get; set; }
   }
0 голосов
/ 11 мая 2019

То есть вы хотите отобразить 2 модели в 1 представлении, верно?

В этом сценарии вы можете применить шаблон MVVM.

Вот пример:

Я определю 3 класса в папке Model

public class Post 
{
   public string Id {get;set;}
   public string Content {get;set;}
   public string UserId {get;set;}
}

public class Comment 
{
  public string Id {get;set;}
  public string Content {get;set;}
  public string PostId {get;set;}
}

// this will hold data for 2 class above
public class PostVM 
{
  public Post Post {get;set}
  public Comment Comment {get;set}
}

Затем в моем контроллере я сделаю запрос в db, чтобы получить данные для публикации и комментарий, подобный этому

public IActionResult PostDetail(string postId)
{
  var post = _postRepository.GetPostById(postId);
  var comment = _commentRepository.GetCommentByPostId(postId);
  // MVVM model return to the view
  var vM = new PostVM 
  {
    Post = post,
    Comment = comment
  }
}

Наконец, на мой взгляд

@model PostVM

<div> @model.Post.Content </div>
@foreach(var comment in @model.Comment)
{
  <div> @comment.Content</div>
}

Пожалуйста, отрегулируйте соответственно с вашим кодом. Если у вас есть какие-либо проблемы, пожалуйста, дайте мне знать.

Приветствия

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