繁体   English   中英

ASP.NET MVC Web 应用程序从 MySQL 数据库中获取不完整的数据

[英]ASP.NET MVC Web App gets incomplete data from MySQL database

我刚刚开发了我的第一个 ASP.NET MVC web 应用程序。 该页面的主要 function 是查看所有将来自数据库的数据到表中。 我本地数据库中的数据存储是包含姓名、地址、电话号码等联系信息的集合。我实际上能够检索数据并在我的索引页面上的表格中查看它。 但是,上面缺少一些数据。

这是我的桌子的样子: 在此处输入图像描述

这是我的实际数据库:

[在此处输入图像描述

这是我的联系人 model:

public class Contacts
{
   public int Id { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public string Address { get; set; }
   public string State { get; set; }
   public string Country { get; set; }
   public int ZipCode { get; set; }
   public string PhoneNumber { get; set; }
   public string Notes { get; set; }
}

对于我的 Controller,这是我所做的:

public class HomeController : Controller
{
   public ActionResult Index()
   {
      var data = SQLDataAccess.GetContacts();
      List<Contacts> contacts = new List<Contacts>();

      foreach (var item in data)
      {
          contacts.Add(new Contacts
          {
              FirstName = item.FirstName,
              LastName = item.LastName,
              Address = item.Address,
              State = item.State,
              Country = item.Country,
              ZipCode = item.ZipCode,
              PhoneNumber = item.PhoneNumber,
              Notes = item.Notes
          });
      }
      return View(contacts);
   }
}

SQLDataAccess 看起来像这样:

public static class SQLDataAccess
{
   public static List<T> GetData<T>(string sql)
   {
      using (MySqlConnection connect = new MySqlConnection("Data Source=localhost; port=3306; Database=testdb; UserId=root; password=123456"))
      {
         connect.Open();
         return connect.Query<T>(sql).ToList();
      }
   }

   public static List<Contacts> GetContacts()
   {
      string select = @"Select * from contacts;";
      return GetData<Contacts>(select);
   }
}

请在此处复制视图的 cshtml 代码。 我希望这没关系。

 @model IEnumerable<ContactsTable.Models.Contacts> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Refresh Table", "Index") </p> <table class="table"> <tr> <th> @Html.DisplayNameFor(model => model.FirstName) </th> <th> @Html.DisplayNameFor(model => model.LastName) </th> <th> @Html.DisplayNameFor(model => model.Address) </th> <th> @Html.DisplayNameFor(model => model.State) </th> <th> @Html.DisplayNameFor(model => model.Country) </th> <th> @Html.DisplayNameFor(model => model.ZipCode) </th> <th> @Html.DisplayNameFor(model => model.PhoneNumber) </th> <th> @Html.DisplayNameFor(model => model.Notes) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.FirstName) </td> <td> @Html.DisplayFor(modelItem => item.LastName) </td> <td> @Html.DisplayFor(modelItem => item.Address) </td> <td> @Html.DisplayFor(modelItem => item.State) </td> <td> @Html.DisplayFor(modelItem => item.Country) </td> <td> @Html.DisplayFor(modelItem => item.ZipCode) </td> <td> @Html.DisplayFor(modelItem => item.PhoneNumber) </td> <td> @Html.DisplayFor(modelItem => item.Notes) </td> </tr> } </table>

我在 SQLDataAccess class 下的 GetData() function 的return行之前插入了这一行,并且能够通过断点检查是否已检索到所有 3 个数据,但缺失数据的 rest 为 NULL。

var test = connect.Query<T>(sql);

我尝试使用 gridview 并通过 DataBind 检索数据并且它有效,在表中成功查看了所有数据。

有人可以帮我理解为什么会这样吗? 任何帮助将不胜感激。

谢谢!

我想您正在使用 Dapper 检索数据并将其放入您的 class 中。在这种情况下,您应该知道 dapper 会自动将字段名称映射到具有相同名称的 class 的属性名称。 您缺少的字段中都有一个 _,因此 dapper 无法将这些值传输到您的属性。

一个简单的解决方案不涉及重命名 class 属性以匹配数据库字段名称或重命名字段名称以匹配属性名称或使用映射代码如下

public static List<Contacts> GetContacts()
{
    string select = @"select id, first_name as FirstName, last_name as LastName
                    address, state, country, zip_code as zipcode,
                    phone_number as phonenumber, notes
                    from contacts";
   return GetData<Contacts>(select);
}

通过这种方式,每个不同的字段名称都有别名以匹配属性名称,并且 Dapper 应该能够完全填充您的 class 实例。

connect.Query(sql,commandType:CommandType.Text).ToList();

还有字符串 select = @"从联系人中选择 *";

  [Display(Name="FirstName")]
   public string first_name { get; set; }
  [Display(Name="LastName")]
   public string last_name{ get; set; }
  [Display(Name="Address")]
   public string address { get; set; }
  [Display(Name="State")]
   public string state { get; set; }
  [Display(Name="ZipCode")]
   public int zipCode { get; set; }
  [Display(Name="PhoneNumber")]
   public string phone_number { get; set; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM