我正在尝试提交包含复选框的表单。 提交表单时,我没有从表单中获取选定的数据。我一直在尝试使用as-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; }
}
}
答案 0 :(得分:0)
据我所知,标签助手不能与模型类一起使用,它只能用于模型的属性。
这意味着我们不能使用像<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"
的含义,我们只能使用此"@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>
结果: