Я должен отправить TestArr с заполненной Name
из формы ввода, а также 0, 1 или лот ComplexObj
с этим TestArr
К сожалению, моя реализация вложенной формы не является обязательной ComplexObj[]
действительно хорошо - это просто не работает.Есть идеи, как это сделать?Я попробовал с BeginCollectionItemCore
, но в этом случае у меня не получилось
public class TestArr
{
[Key]
public int Id { get; set; }
public string Name { get; set;}
public ComplexObj[] complex { get; set; }
}
public class ComplexObj
{
[Key]
public int Id { get; set; }
public string a { get; set; }
public string b { get; set; }
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Name, complex")] TestArr input)
{
if (ModelState.IsValid)
{
_context.Add(input);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View();
}
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></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>
<div id="ComplexObj">
<label class="control-label">a</label>
<input asp-for="complex[0].a" class="form-control" />
<label class="control-label">b</label>
<input asp-for="complex[0].b" class="form-control" />
<label class="control-label">a</label>
<input asp-for="complex[1].a" class="form-control" />
<label class="control-label">b</label>
<input asp-for="complex[1].b" class="form-control" />
</div>
<button type="button" id="addComplex" onclick="test()">addComplex</button>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
Редактировать
WTF?Я изменил complex
на Complex
в TestArr
, [Bind()]
и View
, и он начал работать
Но когда я динамически генерирую формы ввода из javascript как .innerHTML +=
, он останавливается ...
<script>
var counter = 0;
function test()
{
var div = document.getElementById('ComplexObj');
div.appendChild +=
`
<label class="control-label">a</label>
<input asp-for="Complex[${counter}].a" class="form-control" />
<label class="control-label">b</label>
<input asp-for="Complex[${counter}].b" class="form-control" />
`;
counter++;
}
</script>
Какой браузер отображает как:
<label class="control-label">a</label>
<input asp-for="Complex[0].a" class="form-control">
<label class="control-label">b</label>
<input asp-for="Complex[0].b" class="form-control"></div>
Итак, весь div выглядит так:
<div id="ComplexObj" style="height: 200px;">
<label class="control-label">a</label>
<input asp-for="Complex[0].a" class="form-control">
<label class="control-label">b</label>
<input asp-for="Complex[0].b" class="form-control">
</div>
Но контроллер видит его как null
.