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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:25:39