Я новичок в веб-программировании в целом и пытаюсь создать простую страницу ввода данных с помощью Razor Pages на ASP.Net Core 3.0.
У меня возникли проблемы с SelectList в теге. Поведение, которое я пытаюсь получить, заключается в захвате значения идентификатора из SelectList в представлении, которое просто отказывается работать правильно, по крайней мере, в методе OnPost.
Вот мой код:
Получить нужные мне записи с помощью FromSqlRaw
Основная таблица и список элементов в виде IEnumerable
Код в представлении как SelectList
Как список выглядит на реальном сайте
Что мне действительно нужно, так это зафиксировать значение идентификатора (IDCON) элемента списка и отправить его в связанное свойство в asp-for, но по какой-либо причине возвращаемое значение всегда равно нулю. Любые идеи о том, что я делаю неправильно или, возможно, другой подход?
Любая помощь будет принята с благодарностью.
Можно попробовать добавить [BindProperty]
, вот рабочая демка с фейковыми данными.
cshtml:
<form method = "post">
<label asp-for = "registro.IDCON">Consecuencia</label>
<select asp-for = "registro.IDCON" asp-items = "@(new SelectList(Model.consecuencias,"IDCON","DSCCON"))">
<option value = "">---Elegir Consecuencia---</option>
</select>
<span asp-validation-for = "registro.IDCON" class = "text-danger"></span>
<input type = "submit" value = "submit"/>
</form>
cshtml.cs:
public class TestIDCONModel : PageModel
{
[BindProperty]
public ROCONSEC registro { get; set; }
[BindProperty]
public List<ROCONSEC> consecuencias { get; set; }
public IActionResult OnGet()
{
consecuencias = new List<ROCONSEC> { new ROCONSEC { IDCON = 1, DSCCON = "PROCESO RALENTIZADO" }, new ROCONSEC { IDCON = 2, DSCCON = "PROCESO DESTRUIDO" } };
return Page();
}
public IActionResult OnPost()
{
int IDCON = registro.IDCON;
return Page();
}
}
результат:
Спасибо за ваш ответ.
Стыдно сказать, что у меня возникла эта проблема, потому что я неправильно сопоставил свою модель основной таблицы со значениями внешнего ключа. Я отображал непосредственно как объект соответствующей таблицы вместо типа поля, который во время выполнения пытался получить идентификатор из моей основной таблицы, которой, очевидно, не существовало.
При этом именно ваш вклад привел меня к этому осознанию, когда я использовал Request.Form[""] для проверки того, передается ли какое-либо значение из представления в виртуальную машину, что показалось мне странным, поскольку это было так, но acceptValue в ModelState был нулевым. Я перепроверил весь свой код и, наконец, исправил проблему, теперь моя страница работает как положено.
Ваше здоровье!