You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor Pages下拉列表绑定数据库表提交时选中值无法绑定问题

问题修复方案

你的下拉值无法提交到InfoSite表是3处基础配置缺失导致,按以下步骤修改即可:

核心错误1:前端select标签未配置模型绑定

你仅配置了asp-items渲染下拉选项,缺少asp-for属性绑定到后端模型字段,表单提交时不会将选中值传递给后端。
修改文件:Create.cshtml
将原有select代码替换为:

<select asp-for="InfoSite.ResType" asp-items="Model.ResCategoryOptions" class="form-select">
    <option value="" selected disabled>---Select Residence Type---</option>
</select>

asp-for会自动生成符合Razor Pages模型绑定规则的name、id属性,无需手动编写id属性。


核心错误2:后端PageModel缺少绑定特性与下拉数据重加载逻辑

你未给InfoSite实体加模型绑定标记,且未处理Post提交验证失败时的下拉数据重载,会出现值绑定失败、页面空引用报错问题。
修改文件:Create.cshtml.cs

  1. 首先在文件顶部引入必要命名空间:
using Microsoft.AspNetCore.Mvc.Rendering;
  1. 替换原有属性与请求方法代码:
// 加[BindProperty]特性,标记该属性接收表单提交的绑定值
[BindProperty]
public InfoSite InfoSite { get; set; }
// 下拉选项列表统一用SelectList类型,直接传递给前端渲染
public SelectList ResCategoryOptions { get; set; }

public async Task OnGet()
{
    // 页面初始化时加载ResCategory表数据
    // 第二个参数是选项实际提交的值字段,第三个是下拉显示的文本字段
    var categories = await _db.ResCategory.ToListAsync();
    // 如果你要存分类描述文本,值字段传"Description";如果要存分类主键ID做外键关联,值字段传"ID"
    ResCategoryOptions = new SelectList(categories, "Description", "Description");
}

public async Task<IActionResult> OnPost()
{
    // 模型验证失败时,必须重新加载下拉选项再返回页面,否则会出现空引用错误
    if (!ModelState.IsValid)
    {
        var categories = await _db.ResCategory.ToListAsync();
        ResCategoryOptions = new SelectList(categories, "Description", "Description");
        return Page();
    }
    await _db.InfoSite.AddAsync(InfoSite);
    await _db.SaveChangesAsync();
    TempData["success"] = "Site Information added successfully.";
    return RedirectToPage("Index");
}

ResType字段类型配置说明

  • 如果你需要存储ResCategory表的Description文本值:现有public string? ResType { get; set; }配置正确,可空标记符合未选择选项时存null的业务逻辑。
  • 如果你需要做规范的外键关联(推荐,后续修改分类名称不会影响历史数据):将InfoSite模型中该字段改为public int? ResCategoryId { get; set; },同时将SelectList的值字段参数改为"ID"即可。

代码存放位置规范

  • 数据库实体类(InfoSite、ResCategory):存放在项目根目录的Models文件夹
  • Razor视图(.cshtml)与对应后台代码(.cshtml.cs):按业务模块存放在Pages目录下的子文件夹,例如InfoSite的增删改查页面统一放在Pages/InfoSites路径
  • 数据库上下文(DbContext):存放在项目根目录的Data文件夹
  • 多页面复用的下拉选项逻辑可抽成独立服务类存放在Services文件夹,单页面使用的下拉逻辑直接写在对应PageModel中即可。

内容的提问来源于stack exchange,提问作者MelB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:09:33