C# ASP.NET Core 5-具有动态字段数的表单
我正在用ASP.NETCore5做一个网页项目,遇到了以下问题。 我的模型看起来像这样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; }
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
属性自己提取值,然后手动将它们设置为您的模型。这是一种处理一次性模型绑定异常的快速而简单的方法,无需实现自定义模型绑定器。