如何使用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
相关产品推荐
相关产品推荐

