首页 > 解决方案 > 将模型列表从一页传递到控制器

问题描述

我试图将模型列表传递给控制器​​,但没有运气。我在生成空视图然后将值从填充表单传递到控制器时遇到问题。我有的:

楷模

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>

当然模型永远无效。我不知道如何做这样的功能。

标签: razorasp.net-core-mvc

解决方案


正如@StephenMuecke 所说,使用 for-loop 是可行的方法。在这个特殊的问题中,我已经足够做:

控制器:

    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*@
        }

我还要感谢 M. Kostrzewski 和 M. Kaletka,他们也在一些 .net 组中帮助了我


推荐阅读