Передача списка моделей с одной страницы на контроллер - PullRequest
0 голосов
/ 13 октября 2018

Я попытался передать список моделей контроллеру, но безуспешно.У меня проблема с генерацией пустого представления и передачей значений из заполненных форм в контроллер.Что у меня есть:

Модели

public class PostsModel
{
    [Required]
    [DataType(DataType.DateTime)]
    public DateTime PublishDate { get; set; }

    [Required]
    public List<PostModel> Posts { get; set; }
}

public class PostModel 
{
    public string Language {get;set;}
    public string X {get;set;}
    public string Y {get;set;}
    // and other properties
}

Контроллер

public IActionResult New()
{
    ViewData["ButtonName"] = "Add";

    return View(new PostsModel { PublishDate = DateTime.UtcNow });
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> New(PostsModel model)
{
    if (ModelState.IsValid)
    {
        // some code
        // never reaches this point
    }

    return View(model);
}

Форма:

<form method="post">
    <h4>XYZ</h4>
    <hr />
    @{
        Model.Posts = new List<PostModel>(2);
        for (var i = 0; i < 2; i++)
        {
            Model.Posts.Add(new PostModel());
        }

        foreach (var test in Model.Posts)
        {
            <h4>xyz</h4>
            <div class="form-group">
                <label asp-for="@test.Subject">Temat</label>
                <input asp-for="@test.Subject" class="form-control" />
                <span asp-validation-for="@test.Subject" class="text-danger"></span>
            </div>
        }
    }
    <button type="submit" class="btn btn-primary">@ViewData["ButtonName"]</button>
</form>

Конечно, модель никогда не действительна.Я понятия не имею, как сделать такую ​​функциональность.

1 Ответ

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

Как сказал @StephenMuecke, использование цикла for - это рабочий подход.В этой конкретной задаче, которую у меня было, достаточно сделать:

Контроллер:

    public IActionResult New()
    {
        ViewData["ButtonName"] = "Add";

        // example:
        return View(new PostsModel { PublishDate = DateTime.UtcNow, Posts = new List<PostModel>(2) { new PostModel(), new PostModel() } });
    }

Просмотр:

        for (var i = 0; i < Model.Posts.Count; i++)
        {
            <h4>xyz</h4>
            <div class="form-group">
                <label asp-for="@Model.Posts[i].Subject">Temat</label>
                <input asp-for="@Model.Posts[i].Subject" class="form-control" />
                <span asp-validation-for="@Model.Posts[i].Subject" class="text-danger"></span>
            </div>
            @*and so one*@
        }

Я также хочу поблагодарить М. Костшевского и М. Калетку, которые также помогли мне в какой-то группе .net

...