Я не знаю, есть ли лучший способ, но я решил это, используя шаблоны редактора, как показано ниже:
Модели классов:
public class MyViewModel
{
public int? Id { get; set; }
public string Name { get; set; }
public List<GridDataViewModel> GridDataViewModels { get; set; }
}
class GridDataViewModel
{
public int Id { get; set; }
public string Value { get; set; }
}
Просмотр MyViewModel:
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Id" class="control-label"></label>
<input asp-for="Id" class="form-control" />
<span asp-validation-for="Id" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
@Html.EditorFor(m => m.GridDataViewModels)
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
Затем вы добавляете новую директорию в директорию вашего представления под названием «EditorTemplates» и внутри нее вы добавляете новое представление с точным именем вашего списка ViewModel. В этом примере я помещаю имя «GridDataViewModel.cs html».
Внутренний вид помещенных вами шаблонов редактора:
@model WebApplication1.Models.GridDataViewModel
<div class="form-group">
<label asp-for="Id" class="control-label"></label>
<input asp-for="Id" class="form-control" />
<span asp-validation-for="Id" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Value" class="control-label"></label>
<input asp-for="Value" class="form-control" />
<span asp-validation-for="Value" class="text-danger"></span>
</div>
Когда вы публикуете, ваш список будет внутри вашего параметра MyViewModel . Вы можете исследовать больше вещей, но я думаю, что это даст вам некоторые идеи.
Это мой первый ответ, простите меня, если я допустил несколько английских sh ошибок или мой ответ не в лучшем формате.