Вместо передачи списка объектов я бы создал класс:
public class PersistantMessagesPartialModel{
public List<WebChat.Models.MessageModel> Messages{get;set;}
}
и передал бы объект, используя атрибут для , например:
@model IndexViewModel
<partial name="_PersistantMessagesPartial.cshtml" for="PersistantMessagesPartialModel" />
Тогда ваш частичный вид будет выглядеть так:
@model PersistantMessagesPartialModel
@foreach(var item in Model.Messages)
{
<script>
console.log("MessagePartial");
console.log(@item.Contents);
</script>
}
Контроллер будет выглядеть так:
[HttpGet]
public async Task<IActionResult> Index()
{
var viewModel = new IndexViewModel(){
PersistantMessagesPartialModel = new
PersistantMessagesPartialModel(){
Messages = await
_AppUserDBContext.userList.ToListAsync()
};
return View(viewModel);
}
IndexViewModel
будет выглядеть так:
public class IndexViewModel{
public PersistantMessagesPartialModel
PersistantMessagesPartialModel {get;set;}
}
Я знаю, что ASP.NET MVC позволяет вам определять модель данной страницы как список объектов, однако я верю в правило, что каждая страница .cshtml должна иметь единственный класс модели.Это дает вам большую гибкость, когда вы хотите добавить новую логику в представление.Просто представьте себе простой случай, когда вы хотите добавить в свое частичное представление оператор if, который будет работать на основе некоторого значения, заданного в бэкэнде вашего приложения.В таком случае вам нужно будет использовать объекты ViewBag, ViewData для передачи его в представление, и это немного сложнее поддерживать, особенно если ваше приложение велико.В моем решении вы просто добавили бы это дополнительное поле к PersistantMessagesPartialModel
, и даже в случае, если вы хотите сделать какое-то переименование и т. Д., Это просто быстрее и безопаснее.