Поскольку вы не пытаетесь опубликовать коллекцию в одном представлении, вам нужно потерять индекс по названию модели.
Tasks[0].TaskId
Настройте ваши взгляды. Имя переменной «задача» должно соответствовать параметру действия, поскольку HtmlHelpers будет генерировать атрибуты имени на основе этой строки.
@model Checkpoint.Models.Checklist
<table>
@foreach(Task task in Model.Tasks)
{
@Html.EditorFor(m => task)
}
</table>
Рендеринг HTML выглядит примерно так:
<input id="task_TaskId" name="task.TaskId" type="hidden" value="1">
...
Для действия требуется параметр "task" для сопоставления, чтобы связать его значения
[HttpPost]
public ActionResult Index(Task task)
{
return Content($"Save Task:{task.TaskId} Value:{task.IsDone}");
}
Если мы используем частичное представление вместо шаблона редактора, мы можем немного ослабить зависимость имени от «задачи».
@model Checkpoint.Models.Checklist
<table>
@foreach(Task t in Model.Tasks)
{
@Html.PartialView("_TaskForm", t)
}
</table>
И ваш шаблонный редактор будет работать точно так же.
_TaskForm
@model Checkpoint.Models.Task
<tr>
<td>@Model.TaskName</td>
<td data-ftid="@Model.TaskId">
@{
using (Html.BeginForm("Index", "Check", FormMethod.Post))
{
@Html.HiddenFor(x => x.TaskId)
@Html.RadioButtonFor(x => x.IsDone, false)<span>Incomplete</span>
@Html.RadioButtonFor(x => x.IsDone, true)<span>Complete</span>
<button role="button" type="submit" name="taskAction">Submit</button>
}
}
</td>
</tr>
и рендеринг HTML
<input id="TaskId" name="TaskId" type="hidden" value="1">
...
Гоча со всем вышеперечисленным атрибутом html id
не будет уникальной. Поэтому, если это важно, вам нужно будет вручную выполнить итерацию коллекции, чтобы построить каждую форму вручную, чтобы вы могли точно указать значения идентификатора. То есть вы потеряете небольшой модульный редактор шаблонов.
Позволяя фреймворку автоматически генерировать "уникальные" идентификаторы ... мы перезаписываем атрибут name (обратите внимание на заглавную букву для "Name"), который мы имеем:
@model Checkpoint.Models.Checklist
<table>
@for(int i = 0; i < Model.Tasks.Count; i++)
{
<tr>
<td>@Model.Tasks[i].TaskName</td>
<td data-ftid="@Model.Tasks[i].TaskId">
@using (Html.BeginForm("Index", "Check", FormMethod.Post))
{
@Html.HiddenFor(x => Model.Tasks[i].TaskId, new { Name="TaskId" })
@Html.RadioButtonFor(x => Model.Tasks[i].IsDone, false, new { Name="IsDone" })<span>Incomplete</span>
@Html.RadioButtonFor(x => Model.Tasks[i].IsDone, true, new { Name="IsDone" })<span>Complete</span>
<button role="button" type="submit" name="taskAction">Submit</button>
}
</td>
</tr>
}
</table>