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

如何使用C#在ASP.NET页面展示MySQL数据库中的信息?

问题分析与修正方案

核心问题1:对象复用导致List数据重复

你仅在循环外创建了一个Pregunta对象,每次循环只是修改该对象的属性再添加到List中,最终List里的所有元素都是同一个对象的引用,页面展示的只会是数据库最后一行的数据。

核心问题2:连接字符串格式错误

连接字符串里的94 Allow User Variables = True;是无效内容,应改为Allow User Variables=True;。

核心问题3:不符合Razor Pages最佳实践

使用runat="server"的控件操作DOM并非Razor Pages的常规写法,建议通过模型属性传递数据,在页面用Razor语法直接渲染。


修正后的代码

1. 页面模型(file.cshtml.cs)

public class YourPageModel : PageModel
{
    // 定义模型属性,用于传递数据到页面
    public List<Pregunta> Preguntas { get; set; } = new List<Pregunta>();

    public void OnPost()
    {
        string cs = @"server=localhost;userid=root;password=;database=lavaquestbd;Allow User Variables=True;";

        using (MySqlConnection connection = new MySqlConnection(cs))
        {
            connection.Open();

            string sql = "SELECT * FROM preguntas";
            using (MySqlCommand command = new MySqlCommand(sql, connection))
            {
                using (MySqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        // 每次循环创建新的Pregunta对象,避免引用复用
                        Pregunta preg = new Pregunta();
                        preg.idPregunta = reader.GetInt32("idPregunta");
                        preg.pregunta = reader.GetString("pregunta");
                        preg.respuesta1 = reader.GetString("respuesta1");
                        preg.respuesta2 = reader.GetString("respuesta2");
                        preg.respuesta3 = reader.GetString("respuesta3");
                        preg.respuesta4 = reader.GetString("respuesta4");
                        preg.correcta = reader.GetInt32("correcta");

                        Preguntas.Add(preg);
                    }
                }
            }
            // using代码块会自动释放连接,无需手动调用Close()
        }
    }
}

2. 页面视图(file.cshtml)

<form method="post">
    <button type="submit">加载数据</button>
</form>

@if (Model.Preguntas.Any())
{
    <div id="outputDiv">
        @foreach (var pregunta in Model.Preguntas)
        {
            <p>@pregunta.respuesta2</p>
            <!-- 可按需添加更多属性展示,示例:
            <p>问题内容:@pregunta.pregunta</p>
            <p>正确选项序号:@pregunta.correcta</p>
            -->
        }
    </div>
}

额外提示

  • 确保Pregunta类的所有属性均为public访问级别,否则页面无法读取属性值。
  • 建议添加异常捕获逻辑,处理数据库连接、查询过程中可能出现的错误,避免程序直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:28