【问题标题】:How to capture ID value from a SelectList item in Razor Pages?如何从 Razor 页面中的 SelectList 项中捕获 ID 值?
【发布时间】:2020-12-14 21:52:19
【问题描述】:
【问题讨论】:
标签:
html
asp.net-core
bootstrap-4
razor-pages
selectlist
【解决方案1】:
您可以尝试添加[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();
}
}
结果:
【解决方案2】:
感谢您的回答。
说我遇到这个问题很尴尬,因为我将主表模型不正确地映射到外键值上。我直接映射为相应表的对象而不是字段类型,它在运行时试图从我的主表中获取明显不存在的 ID。
话虽如此,当我使用 Request.Form[""] 检查是否有任何值从视图传递到 VM 时,是您的贡献让我意识到了这一点,这让我感到很奇怪,因为它是,但 ModelState 中的acceptedValue 为空。我重新检查了我的整个代码并最终纠正了这个问题,现在我的页面正在按预期工作。
干杯!