【问题标题】:Displaying a List of objects in a MVC view page在 MVC 视图页面中显示对象列表
【发布时间】:2015-03-26 17:55:43
【问题描述】:

我正在做一个学校项目,但我被困住了。 我想要做的是.. 通过按下页面上的按钮来调用执行读取 sql 查询的方法。然后它创建填充了来自查询的信息的模型对象,并将它们放在一个列表中。一旦列表被填满,它应该返回一个显示所有对象的视图。 (在我的情况下,视图将显示 sql 数据库中存在的所有“订单”)

我的按钮代码(我的方法叫:LaadBestellingen,我的Controller叫Beheer:

<button type="button" onclick="location.href='@Url.Action("LaadBestellingen", "Beheer")'"> LOAD ORDERS </button>

这是 BeheerController 方法:

public ActionResult LaadBestellingen()
    {
        try
        {
            conn.Open();
            String selectQuery = "SELECT voornaam, achternaam, adres, postcode, email, telefoon, totaalprijs , datum FROM bestelling b JOIN klant k ON k.idklant = b.idklant JOIN product p ON p.idproduct = b.idproduct;";
            MySqlCommand cmd = new MySqlCommand(selectQuery, conn);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            List<Bestelling> bestellingenlijst = new List<Bestelling>();

            while (dataReader.Read())
            {
                Bestelling bestelling = new Bestelling();

                bestelling.Klantvoornaam = dataReader.GetString("voornaam");
                bestelling.Klantachternaam = dataReader.GetString("achternaam");
                bestelling.Klantadres = dataReader.GetString("adres");
                bestelling.Klantpostcode = dataReader.GetString("postcode");
                bestelling.Klantemail = dataReader.GetString("email");
                bestelling.Klanttelefoon = dataReader.GetString("telefoon");
                bestelling.Totaalprijs = dataReader.GetDouble("totaalprijs");

                bestellingenlijst.Add(bestelling);

            }


                return View(bestellingenlijst);


        }

        catch (Exception e)
        {
            Console.Write("Er is een fout opgetreden tijdens laden van de bestellingen", e);
            return View("Index");

        }
        finally
        {
            conn.Close();
        }
    }

最后这是我的观点的代码,它与方法 LaadBestellingen 同名:

@using WebWinkelGroep16.Models;
@model List<Bestelling>

略过一点html代码,这里假设是它显示的内容:

 <div id="content">
        <ul>
            @{
                foreach (Bestelling element in @Model)
                {                      
                     <li>   Voornaam: @element.Klantvoornaam <br /> </li>
                      <li>  Achternaam: @element.Klantachternaam<br /></li>
                       <li> Adres: @element.Klantadres<br /></li>
                       <li>  Postcode: @element.Klantpostcode<br /></li>
                     <li>   Email: @element.Klantemail <br /></li>
                     <li>   Telefoon: @element.Klanttelefoon<br /></li>
                     <li>   Totaalprijs: @element.Totaalprijs<br /></li>

                }
            }
        </ul>
    </div>

我做错了什么?当我尝试执行 SQL 查询时,它就像一个魅力,并显示了所有被询问的信息。由于某种原因,它总是将我发送到 catch 中的返回视图。

【问题讨论】:

  • 您遇到了什么异常?如果它进入 catch 块,那么就会出现问题。进入它并发布异常消息。这将使我们能够提供更多帮助
  • 这就是问题所在……这是我第一次使用 MVC 和 Visual Studio。到目前为止,我只在 netbeans 环境中执行 java,其中每个执行都被控制台捕获。在这里我什至不知道在哪里寻找异常......:/
  • 点击异常块中的返回视图行,按F9,这将使行变成红色,现在按F5,项目应该运行,当它到达红线时它会停止并且你可以将鼠标悬停在字母 e 上,您可以检查它的值。做一些阅读msdn.microsoft.com/en-us/library/y740d9d3.aspx
  • 它说:+ {“'字段列表'中的未知列'基准'”} System.Exception {MySql.Data.MySqlClient.MySqlException}
  • 但我什至没有在我的查询或任何地方选择该字段..

标签: c# sql asp.net-mvc model-view-controller


【解决方案1】:

如果你这样写你的查询:

String selectQuery = @"SELECT voornaam
, achternaam
, adres
, postcode
, email
, telefoon
, totaalprijs 
, datum 
FROM bestelling b 
JOIN klant k ON k.idklant = b.idklant 
JOIN product p ON p.idproduct = b.idproduct;";

您将看到您实际上选择了datum 列。只需删除它。看看发生了什么。

【讨论】:

  • 哇,谢谢,我不敢相信我会这么盲目.. 我的代码变红了 100 倍。从现在开始我会像你一样写我的查询lol。
  • 或者使用orm或者使用存储过程!
  • @matt_lethargic 对,你的逻辑最好使用 orm
猜你喜欢
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多