Enumerable.ElementAt()
возвращает тип (тип возвращаемого значения TSource
), а не имя свойства, которое необходимо добавить в атрибут name
. Вместо этого используйте индексатор свойств коллекции:
<form asp-action="SaveSettings" asp-controller="Home" method="post">
<div align="center">
<div align="center">
@for (int i = 0; i < Model.listOfSettings.Count; i++)
{
@Html.HiddenFor(m => m.listOfSettings[i].settingID)
@Html.HiddenFor(m => m.listOfSettings[i].settingText)
<div>
@Html.DisplayTextFor(m => m.listOfSettings[i].settingText)
</div>
<div>
@Html.CheckBoxFor(m => m.listOfSettings[i].settingsSelected)
</div>
<br />
<br />
<br />
}
</div>
</div>
<!-- add a button here to submit the form -->
<button type="submit">Submit</button>
</form>
Версия помощника по тегам:
<form asp-action="SaveSettings" asp-controller="Home" method="post">
<div align="center">
<div align="center">
@for (int i = 0; i < Model.listOfSettings.Count; i++)
{
<input asp-for="listOfSettings[i].settingID" type="hidden" />
<input asp-for="listOfSettings[i].settingText" type="hidden" />
<div>
@Html.DisplayTextFor(m => m.listOfSettings[i].settingText)
</div>
<div>
<input asp-for="listOfSettings[i].settingsSelected" type="checkbox" />
</div>
<br />
<br />
<br />
}
</div>
</div>
<!-- add a button here to submit the form -->
<button type="submit">Submit</button>
</form>
Также вам необходимо заменить тип возвращаемого значения с void
на ActionResult
(или IActionResult
, если используется .NET Core):
[HttpPost]
public ActionResult SaveSettings(SettingsListModel SettingsModel)
{
DataLayer dl = new DataLayer();
// do something
return View(model);
}