Отправка complexObj, в котором есть другие complexObject [], через POST из View - PullRequest
0 голосов
/ 02 октября 2018

Я должен отправить 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.

1 Ответ

0 голосов
/ 03 октября 2018

Решение:

Изменение:

<input asp-for="Complex[0].b" class="form-control">

на:

<input name="Complex[0].b" class="form-control">

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