Razor 将模型列表从一页传递给控制器

Razor 将模型列表从一页传递给控制器,razor,asp.net-core-mvc,Razor,Asp.net Core Mvc,我试着把模型列表传给控制器,但没有成功。我在生成空视图,然后将填充表单中的值传递给控制器时遇到问题。我所拥有的: 型号 public class PostsModel { [Required] [DataType(DataType.DateTime)] public DateTime PublishDate { get; set; } [Required] public List<PostModel> Posts { get; set; }

我试着把模型列表传给控制器,但没有成功。我在生成空视图,然后将填充表单中的值传递给控制器时遇到问题。我所拥有的:

型号

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类PostsModel
{
[必需]
[数据类型(数据类型.日期时间)]
public DateTime PublishDate{get;set;}
[必需]
公共列表发布{get;set;}
}
公共类后模型
{
公共字符串语言{get;set;}
公共字符串X{get;set;}
公共字符串Y{get;set;}
//及其他物业
}
控制器

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);
}
public IActionResult New()
{
ViewData[“按钮名称”]=“添加”;
返回视图(新PostsModel{PublishDate=DateTime.UtcNow});
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务新建(PostsModel模型)
{
if(ModelState.IsValid)
{
//一些代码
//从未达到这一点
}
返回视图(模型);
}
表格:

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

XYZ

@{ 模型.职位=新名单(2); 对于(变量i=0;i<2;i++) { Model.Posts.Add(new PostModel()); } foreach(Model.Posts中的var测试) { xyz 特马特 } } @ViewData[“按钮名称”]

当然,这个模型永远都是无效的。我不知道如何实现这样的功能

正如@StephenMuecke所说,使用for循环是一种有效的方法。在我遇到的这个特殊问题中,这就足够了:

控制器:

<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>
    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*@
        }
public IActionResult New()
{
ViewData[“按钮名称”]=“添加”;
//例如:
返回视图(new PostsModel{PublishDate=DateTime.UtcNow,Posts=new List(2){new PostModel(),new PostModel()}});
}
查看:

<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>
    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*@
        }
for(var i=0;i

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

Is
PostsModel模型
null,当它传入时?@chakeda:PostsModel是可以的,但PostModel列表确实是null。您不能使用
foreach
循环为集合生成表单控件-请参阅(并且您在控制器代码中填充模型,而不是在视图代码中)@StephenMuecke您有权