如何修复ASP.NET连接问题以在Razor页面显示数据?
问题:Razor页面无法加载数据库查询数据
我用C#写了数据库连接和调用代码,但调试Web应用时Razor页面加载不出数据。刚接触C#和ASP.NET Framework,试过修改构造函数没用,谷歌搜索也没找到解决方案,求帮忙。
C#代码(PageModel)
namespace Data_Penduduk.Pages.Master { public class IndexModel : PageModel { public List<DataOrang> listOrang = new List<DataOrang>(); public void OnGet() { try { String connectionString = "Data Source=.\\sqlexpress;Initial Catalog=MySource;Integrated Security=True"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); String sql = "SELECT * FROM datas"; using (SqlCommand command = new SqlCommand(sql, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { DataOrang dataOrang = new DataOrang(); dataOrang.NIK = "" + reader.GetInt32(0); dataOrang.Nama = reader.GetString(1); dataOrang.JK = reader.GetString(2); dataOrang.TL = reader.GetString(3); dataOrang.Alamat = reader.GetString(4); dataOrang.Negara = reader.GetString(5); listOrang.Add(dataOrang); } } } } } catch(Exception ex) { Console.WriteLine("Exception: " + ex.ToString()); } } } public class DataOrang { public String NIK; public String Nama; public String JK; public String TL; public String Alamat; public String Negara; } }
Razor页面HTML代码
<tbody> @foreach(var item in Model.listOrang) { <tr> <td>@item.NIK</td> <td>@item.Nama</td> <td>@item.JK</td> <td>@item.TL</td> <td>@item.Alamat</td> <td>@item.Negara</td> <td> <a href="#" class="text-warning">Detail</a> <a href="#" class="text-info">Edit</a> <a href="#" class="text-danger">Delete</a> </td> </tr> } </tbody>
解决方案
1. 将DataOrang的字段改为属性
Razor页面绑定更适配属性而非字段,修改DataOrang类:
public class DataOrang { public string NIK { get; set; } public string Nama { get; set; } public string JK { get; set; } public string TL { get; set; } public string Alamat { get; set; } public string Negara { get; set; } }
2. 修复异常捕获与显示
Web应用中Console.WriteLine的输出无法直接查看,改为在Model中存储异常信息方便排查:
public class IndexModel : PageModel { public List<DataOrang> listOrang = new List<DataOrang>(); public string ErrorMessage { get; set; } // 添加异常信息属性 public void OnGet() { try { // 原有代码不变 } catch(Exception ex) { ErrorMessage = ex.ToString(); // 存储异常信息 } } }
在Razor页面顶部添加异常显示:
@if (!string.IsNullOrEmpty(Model.ErrorMessage)) { <div class="alert alert-danger">@Model.ErrorMessage</div> }
3. 优化数据库查询,避免索引依赖
SELECT *和按索引读取数据容易因表结构变化出错,改为明确列名并按列名读取:
String sql = "SELECT NIK, Nama, JK, TL, Alamat, Negara FROM datas"; using (SqlCommand command = new SqlCommand(sql, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { DataOrang dataOrang = new DataOrang(); // 按列名获取索引,避免列顺序变化导致错误 dataOrang.NIK = reader.GetInt32(reader.GetOrdinal("NIK")).ToString(); dataOrang.Nama = reader.GetString(reader.GetOrdinal("Nama")); dataOrang.JK = reader.GetString(reader.GetOrdinal("JK")); dataOrang.TL = reader.GetString(reader.GetOrdinal("TL")); dataOrang.Alamat = reader.GetString(reader.GetOrdinal("Alamat")); dataOrang.Negara = reader.GetString(reader.GetOrdinal("Negara")); listOrang.Add(dataOrang); } } }
4. 验证数据库连接与数据
- 确认连接字符串中的实例名、数据库名正确:如果是LocalDB,尝试用
Data Source=(localdb)\\mssqllocaldb;如果是默认SQL实例,用Data Source=.; - 检查
datas表中是否有实际数据,且列类型与读取方式匹配(比如NIK如果是字符串类型,不能用GetInt32) - 用断点调试
OnGet方法,查看listOrang是否被正确填充数据
内容的提问来源于stack exchange,提问作者cuanzforlife
相关产品推荐
相关产品推荐

