asp.net-mvc - Asp-action 编辑未从剃刀页面获取数据
问题描述
我试图提交一个包含复选框的表单。当我提交表单时,我没有从表单中获取选定的数据。我一直在尝试使用 asp-for,但我不明白我做错了什么。
这是我的剃须刀页面:
@model TheaterReservering.Models.KlantReservering
@{
ViewData["Title"] = "Edit";
}
<h1>Edit</h1>
<h4>Reservering voor: @Model.Klant.Naam</h4>
<form asp-action="Edit">
<input type="hidden" asp-for="Klant" />
<table class="table">
<thead>
<tr>
<th>
1
</th>
<th>
2
</th>
<th>
3
</th>
<th>
4
</th>
<th>
5
</th>
<th>
6
</th>
<th></th>
</tr>
</thead>
<tbody>
@{
var count = 0;
}
@foreach (var item in Model.Reserveringen)
{
if ((count % 6) == 0)
{
@:<tr>
}
<td style="text-align:center; vertical-align:middle">
<div class="form-group">
@if (item.KlantId == Model.Klant.Id)
{
<input type="checkbox" asp-for="Reserveringen.ElementAt(count).Bezet" checked />
<br />
<div style="background-color: blue; text-align: center">
<label style="color:white" asp-for="@item.Naam">@item.Naam</label>
</div>
}
else if (item.KlantId == null)
{
<input type="checkbox" asp-for="Reserveringen.ElementAt(count).Bezet" />
<br />
<div style="background-color: green; text-align: center">
<label style="color:white" asp-for="@item.Naam">@item.Naam</label>
</div>
}
else
{
<input type="checkbox" checked disabled />
<br />
<div style=" background-color: red; text-align: center">
<label style="color:white" asp-for="@item.Naam">@item.Naam</label>
</div>
}
</div>
</td>
if ((count % 6) == 5)
{
@:</tr>
}
count++;
}
</tbody>
</table>
<div class="form-group">
<input type="submit" value="Reserveringen vastleggen" class="btn btn-primary" />
</div>
</form>
我的控制器方法:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Klant,Reserveringen")] KlantReservering klantReservering)
{
if (id != klantReservering.Klant.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
_context.Update(klantReservering);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(klantReservering);
}
这是我创建的类,用于将 Klant 类与 Reservering 结合起来。
public class KlantReservering
{
public Klant Klant { get; set; }
public List<Reservering> Reserveringen { get; set; }
}
}
解决方案
据我所知,标签助手不能用于模型类,它只能用于模型的属性。
这意味着我们不能像这样使用标签助手<input type="hidden" asp-for="Klant" />
。如果我们想在控制器方法中实现模型绑定。我建议您可以添加所有属性,如下所示:
<input type="hidden" asp-for="@Model.Klant.Id" />
<input type="hidden" asp-for="@Model.Klant.Naam" />
此外,对于 foreach 项,标签助手无法弄清楚是什么"Reserveringen.ElementAt(count).Bezet"
意思,我们只能使用 this "@Model.Reserveringen[count].Bezet"
。
更多细节,您可以参考下面的示例视图:
注意:由于我不知道您关于 Klant 和 Reserveringen 类的详细信息代码,因此我在我身边创建了一个仅包含 Naam 和 Id 属性的测试类。
@model CoreNormalIssue.Models.KlantReservering
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@*
For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
ViewData["Title"] = "Edit";
}
<h1>Edit</h1>
<h4>Reservering voor: @Model.Klant.Naam</h4>
<form asp-controller="Verify" asp-action="Edit" method="post" asp-route-id="@Model.Klant.Id">
<input type="hidden" asp-for="@Model.Klant.Id" />
<input type="hidden" asp-for="@Model.Klant.Naam" />
<table class="table">
<thead>
<tr>
<th>
1
</th>
<th>
2
</th>
<th>
3
</th>
<th>
4
</th>
<th>
5
</th>
<th>
6
</th>
<th></th>
</tr>
</thead>
<tbody>
@{
var count = 0;
}
@foreach (var item in Model.Reserveringen)
{
<input type="text" asp-for="@item.Bezet" />
if ((count % 6) == 0)
{
@:<tr>
}
<td style="text-align:center; vertical-align:middle">
<div class="form-group">
@if (item.KlantId == Model.Klant.Id)
{
<input type="checkbox" asp-for="@Model.Reserveringen[count].Bezet" checked />
<br />
<div style="background-color: blue; text-align: center">
<label style="color:white" asp-for="@item.Naam">@item.Naam</label>
</div>
}
else if (item.KlantId == null)
{
<input type="checkbox" asp-for="@Model.Reserveringen[count].Bezet" />
<br />
<div style="background-color: green; text-align: center">
<label style="color:white" asp-for="@item.Naam">@item.Naam</label>
</div>
}
else
{
<input type="checkbox" checked disabled />
<br />
<div style=" background-color: red; text-align: center">
<label style="color:white" asp-for="@item.Naam">@item.Naam</label>
</div>
}
</div>
</td>
if ((count % 6) == 5)
{
@:</tr>
}
count++;
}
</tbody>
</table>
<div class="form-group">
<input type="submit" value="Reserveringen vastleggen" class="btn btn-primary" />
</div>
</form>
结果:
推荐阅读
- angular - 角通用问题
- r - 检查两个路径是否解析到同一个目录
- python-3.x - 单击相同的 id 按钮 selenium PYTHON
- python-3.x - 已安装 web3 但无法使用 python 访问
- react-native - 如何在 React Native 中的按钮单击上打开 DatePicker
- oracle - Websphere 自由是否支持 UCP
- php - 使用复选框的发票生成器 - 未定义的偏移量 [2] PHP Codeigniter
- ruby - 在每个循环中多次“创建”时未创建新的 ruby 文件
- azure - Azure CLI az vm 命令不再在成功时创建输出
- json - 向 JSONB 中的嵌套 JSON 数组添加新字段