C# ASP.NET Core 5-具有动态字段数的表单

C# ASP.NET Core 5-具有动态字段数的表单,c#,asp.net,asp.net-core,asp.net-core-5.0,C#,Asp.net,Asp.net Core,Asp.net Core 5.0,我正在用ASP.NETCore5做一个网页项目,遇到了以下问题。 我的模型看起来像这样 public class Performance { public int ID { get; set; } public string Title { get; set; } public string Dates { get; set; } public bool DatesRange { get; set; }

我正在用ASP.NETCore5做一个网页项目,遇到了以下问题。 我的模型看起来像这样

  public class Performance
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Dates { get; set; }
        public bool DatesRange { get; set; }
        public string Author { get; set; }
        public string Role { get; set; }
        public Venue Venue { get; set; }

    }
现在,在表单中,我想为性能模型的所有字段输入字段,除了日期。其思想是,单个性能可以有一个或多个日期,因此用户在创建新性能时,可以根据需要在表单中添加更多行

我想做但不知道如何手动处理提交数据的绑定,这样我就可以解析所有提交的日期,并将它们转换为单个字符串保存在数据库中。我不知道该怎么做,或者更确切地说,在哪里做,因为点击提交按钮后触发的第一件事是

        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Performance.Add(Performance);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Index");
        }
公共异步任务OnPostAsync() { 如果(!ModelState.IsValid) { 返回页(); } _context.Performance.Add(性能); wait_context.SaveChangesAsync(); 返回页首(“/索引”); }
提交的数据已经绑定到模型。忽略与模型不对应的任何表单字段。你能给我指出正确的方向吗?

你可以使用
asp页面处理程序
从页面的内部表单发出另一个请求。此外,您还需要将日期定义为
列表
您的
性能
模型如下所示

在razor页面中,您需要设置多个帖子

<form method="post">
<input asp-for="perf.Date" value="Date" />
<button asp-page-handler="Date">Add</button>
<table>
    <th>
        <td>Date</td>
    </th>
    @if (Model.Dates != null)
    {
        for (int i = 0; i < Model.Dates.Count; i++)
        {
            <tr>
                <td>@Model.Dates[i] @Html.HiddenFor(model => Model.Dates[i])</td>
            </tr>
        }
    }
   
    
</table>
<input type="submit" value="Save"/>
输出:


您可以使用
asp页面处理程序
从页面的内部表单发出另一个请求。此外,您还需要将日期定义为
列表
您的
性能
模型如下所示

在razor页面中,您需要设置多个帖子

<form method="post">
<input asp-for="perf.Date" value="Date" />
<button asp-page-handler="Date">Add</button>
<table>
    <th>
        <td>Date</td>
    </th>
    @if (Model.Dates != null)
    {
        for (int i = 0; i < Model.Dates.Count; i++)
        {
            <tr>
                <td>@Model.Dates[i] @Html.HiddenFor(model => Model.Dates[i])</td>
            </tr>
        }
    }
   
    
</table>
<input type="submit" value="Save"/>
输出:


您是否尝试过只添加多个名为
date
的字段?如果您这样做,我相信模型绑定器会将它们绑定为逗号分隔的列表。因此,如果您有例如
?date=2020-12-24&date=1820-12-10
,则您的
日期
字段的值应为
2020-12-241820-12-10
。也就是说,这里的教科书解决方案是将
Dates
作为一个集合,然后根据命名字段。或者,您可以在调用
ModelState.IsValid之前执行一些手动绑定,方法是使用
Controller.Request
属性自己提取值,然后手动将它们设置为您的模型。这是一种处理一次性模型绑定异常的快速简便方法,无需实现自定义模型绑定器。您是否尝试过只添加多个名为
date
的字段?如果您这样做,我相信模型绑定器会将它们绑定为逗号分隔的列表。因此,如果您有例如
?date=2020-12-24&date=1820-12-10
,则您的
日期
字段的值应为
2020-12-241820-12-10
。也就是说,这里的教科书解决方案是将
Dates
作为一个集合,然后根据命名字段。或者,您可以在调用
ModelState.IsValid之前执行一些手动绑定,方法是使用
Controller.Request
属性自己提取值,然后手动将它们设置为您的模型。这是一种处理一次性模型绑定异常的快速而简单的方法,无需实现自定义模型绑定器。