ASP.NET Core Razor Pages模型绑定问题:SelectedDataSourceIDs始终为空
问题解决步骤
1. 修正拼写不一致
视图中label标签的asp-for属性存在拼写错误(多了一个s),与模型属性名不匹配:
<!-- 原错误代码 --> <label asp-for="SelectedDataSourcesIDs" class="control-label"></label> <!-- 修正后 --> <label asp-for="SelectedDataSourceIDs" class="control-label"></label>
2. 匹配表单Handler与Post方法
你的表单指定了asp-page-handler="Analyze",但Razor Pages的命名规则要求,带handler的表单需对应OnPost[HandlerName]()方法,而非默认的OnPost(),可二选一修改:
方案一:移除表单的handler属性
<form method="post">
方案二:修改模型方法名称
public IActionResult OnPostAnalyze() { if (!ModelState.IsValid) { PopulateDataSourceDropDownList(_context); // 重新填充下拉数据 return Page(); } // 后续业务逻辑 return RedirectToPage(); }
3. Post方法中重新填充下拉数据源
无论ModelState验证是否通过,返回Page()前必须重新调用PopulateDataSourceDropDownList(_context),否则下拉框会丢失选项,也会影响绑定回显:
public IActionResult OnPost() { // 重新填充下拉数据 PopulateDataSourceDropDownList(_context); if (!ModelState.IsValid) { return Page(); } // 后续业务逻辑 return RedirectToPage(); }
4. 初始化集合属性
将SelectedDataSourceIDs改为List<int>并初始化,避免绑定前属性为null:
public List<int> SelectedDataSourceIDs { get; set; } = new List<int>();
内容的提问来源于stack exchange,提问作者Bernhard
相关产品推荐
相关产品推荐

