代码填充Razor SelectList(无数据库):下拉框加载无内容
问题解决步骤
核心问题分析
- 移除
@page标签是错误操作:Razor页面必须通过@page标识才能被识别为PageModel驱动的页面,否则页面会被当作普通视图处理,PageModel的OnGet方法不会执行,导致Model为空,下拉框自然无法获取数据。之前的空引用异常并非@page本身导致,需排查其他原因而非移除该标签。 asp-for属性绑定错误:asp-for应绑定用于存储选中值的属性,而非SelectList集合本身。原代码直接将SelectList绑定到asp-for,不符合TagHelper的使用规范。
修改后的PageModel代码(RobotSsh.cshtml.cs)
public class RobotSsh : PageModel { // 存储选中值的属性 [BindProperty] public string SelectedLocalWifi { get; set; } [BindProperty] public string SelectedCustomerWifi { get; set; } // 提供下拉选项的集合 public SelectList LocalWifis { get; set; } public SelectList CustomerWifis { get; set; } public void OnGet() { GetNetworks(); } public void GetNetworks() { List<string> wifiNetworks = ["Local Network", "Customer Network"]; // 初始化SelectList,第二个参数为默认选中项 LocalWifis = new SelectList(wifiNetworks, wifiNetworks[0]); CustomerWifis = new SelectList(wifiNetworks, wifiNetworks[0]); } }
修改后的Razor页面代码(RobotSsh.cshtml)
@page @model App.Views.Home.RobotSsh <!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>Supportinator 3000</h1> <div> <!-- asp-for绑定选中值属性,asp-items绑定选项集合 --> <select asp-for="SelectedLocalWifi" asp-items="@Model.LocalWifis"></select> <select asp-for="SelectedCustomerWifi" asp-items="@Model.CustomerWifis"></select> </div> </body> </html>
额外说明
- 恢复
@page标签后,如果仍出现空引用异常,需检查:- 页面是否放置在正确的目录(Razor页面通常放在
Pages文件夹下,若放在Views/Home需确认路由配置) @model指令的命名空间是否与PageModel的实际命名空间一致- 确保PageModel类的访问修饰符为
public
- 页面是否放置在正确的目录(Razor页面通常放在
内容的提问来源于stack exchange,提问作者user23252660
相关产品推荐
相关产品推荐

