#asp.net-core #binding #razor-pages #asp.net-core-3.1 #model-binding
Вопрос:
Поэтому я пытаюсь создать небольшой инструмент, с помощью которого пользователь может выбрать набор дней. Однако мне нужна довольно сложная модель для дополнительных данных.
public class DayRange{
...
List<DaySelected> Days
...
}
public class DaySelected{
public bool Selected{ get; set;}
public string DayName {get; set;}
public DaySelected(string Day){
Selected = false;
DayName = day;
}
}
Моя бритвенная страница выглядит так:
@Model DayRange
...
<form asp-action="RegisterSelection" asp-controller="DayRegister">
<table>
@foreach (var Day in Model.Days)
{
<tr>
<td>
<input asp-for=@Day.Selected />
</td>
</tr>
}
</table>
<button type="submit">Confirm</button>
</form>
Мой метод Registerselection выглядит следующим образом:
[HttpPost]
public IActionResult RegisterSelection(DayRange dr){
...
}
Однако всякий раз, когда я изменяю какое-либо из текстовых полей, все выбранные значения bool остаются прежними. Кто-нибудь может помочь мне в моем пути? Заранее спасибо!
Ответ №1:
Вот демонстрационная версия для правильной передачи данных в действие:
Модель:
public class DayRange
{
public List<DaySelected> Days { get; set; }
}
public class DaySelected
{
public bool Selected { get; set; }
public string DayName { get; set; }
public DaySelected()
{
}
public DaySelected(string Day)
{
Selected = false;
DayName = Day;
}
}
Вид:
@Model DayRange
<form asp-action="RegisterSelection" asp-controller="DayRegister">
<table>
@{ var i = 0;}
@foreach (var Day in Model.Days)
{
<tr>
<td>
<input asp-for=@Day.Selected name="Days[@i].Selected" />
@Day.DayName
<input asp-for=@Day.DayName name="Days[@i].DayName" hidden />
</td>
</tr>
i ;
}
</table>
<button type="submit">Confirm</button>
</form>
Комментарии:
1. Спасибо за демонстрацию! Я смог заставить это работать сейчас, поэтому я принял ваш ответ как решение этой проблемы. Мне просто интересно, была ли причина, по которой это не сработало, просто потому, что я не заполнил названия компонентов флажков? Мои извинения за простой вопрос, это в основном ново для меня.
2. Да,.net core связывает данные с атрибутом name.