В MVC это делается простым способом (с использованием строго типизированного представления или только ViewBag). Предположим, у вас есть 2 модели - FooViewModel:
public class FooViewModel
{
public int FooId { get; set; }
public List<BarViewModel> Bars { get; } = new List<BarViewModel>();
}
и BarViewModel:
public class BarViewModel
{
public int BarId { get; set; }
public string BarName { get; set; }
public string BarTitle { get; set; }
public int IdFooViewModel { get; set; }
}
Стандартный HomeController был немного изменен:
public IActionResult Index()
{
var vm = new FooViewModel
{
FooId = 1,
Bars =
{
new BarViewModel {BarId = 1, BarName = "First Bar", BarTitle = "I am here!", IdFooViewModel = 1},
new BarViewModel {BarId = 2, BarName = "Second Bar", BarTitle = "Me too!", IdFooViewModel = 1}
}
};
return View(vm);
}
На Во внутреннем интерфейсе бритвы мы создаем объект javascript:
@{
ViewData["Title"] = "Home Page";
}
@using System.Collections.Specialized
@using System.Text.Json
@model FooViewModel
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Index works!</p>
</div>
@section Scripts {
<script>
var vm = window.viewModel = JSON.parse('@Html.Raw(JsonSerializer.Serialize(Model))');
console.dir(vm);
</script>
}
Обратите внимание, разумно используется хелпер тега @Html.Raw
- razor выполняет кодирование html, которое искажает кавычки данных json. Вот почему мы избавляемся от html -кодирования. Но это может быть критично для безопасности - ваш клиент должен доверять вашему бэкэнду.
Затем клиентская сторона десериализует длинный строковый литерал для получения данных.