Пожалуйста, исправьте меня, если я ошибаюсь, но насколько я знаю для этого сценария, @ Html.EditorFor создаст более одного элемента с одинаковым идентификатором элемента.Не так ли?
Эмм, нет.
Модель:
public class Book
{
public int Id { get; set; }
public bool Selected { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new[]
{
new Book { Id = 1, Selected = false },
new Book { Id = 2, Selected = true },
new Book { Id = 3, Selected = false },
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<Book> model)
{
return View(model);
}
}
Вид:
@model IEnumerable<Book>
@using (Html.BeginForm())
{
<table>
<thead>
<tr>
<th>Id</th>
<th>Selected</th>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
<button type="submit">OK</button>
}
Шаблон редактора (~/Views/Shared/EditorTemplates/Book.cshtml
):
@model Book
<tr>
<td>@Html.EditorFor(x => x.Id)</td>
<td>@Html.CheckBoxFor(x => x.Selected)</td>
</tr>
Сгенерированная разметка:
<form action="/" method="post">
<table>
<thead>
<tr>
<th>Id</th>
<th>Selected</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input class="text-box single-line" data-val="true" data-val-number="Le champ Id doit &#234;tre un nombre." data-val-required="The Id field is required." name="[0].Id" type="text" value="1" />
</td>
<td>
<input data-val="true" data-val-required="The Selected field is required." name="[0].Selected" type="checkbox" value="true" />
<input name="[0].Selected" type="hidden" value="false" />
</td>
</tr>
<tr>
<td>
<input class="text-box single-line" data-val="true" data-val-number="Le champ Id doit &#234;tre un nombre." data-val-required="The Id field is required." name="[1].Id" type="text" value="2" />
</td>
<td>
<input checked="checked" data-val="true" data-val-required="The Selected field is required." name="[1].Selected" type="checkbox" value="true" />
<input name="[1].Selected" type="hidden" value="false" />
</td>
</tr>
<tr>
<td>
<input class="text-box single-line" data-val="true" data-val-number="Le champ Id doit &#234;tre un nombre." data-val-required="The Id field is required." name="[2].Id" type="text" value="3" />
</td>
<td>
<input data-val="true" data-val-required="The Selected field is required." name="[2].Selected" type="checkbox" value="true" />
<input name="[2].Selected" type="hidden" value="false" />
</td>
</tr>
</tbody>
</table>
<button type="submit">OK</button>
</form>