ASP.NET MVC Web App 从 MySQL 数据库中获取不完整的数据

Posted

技术标签:

【中文标题】ASP.NET MVC Web App 从 MySQL 数据库中获取不完整的数据【英文标题】:ASP.NET MVC Web App gets incomplete data from MySQL database 【发布时间】:2021-02-26 22:16:54 【问题描述】:

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

这是我的桌子的样子:

这是我的实际数据库:

[

这是我的联系人模型:

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; 

对于我的控制器,这是我所做的:

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 类下的 GetData() 函数的 return 行之前插入了这一行,并且能够通过断点检查所有 3 个数据都已检索到,但其余丢失的数据为 NULL。

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

我尝试使用 gridview 并通过 DataBind 检索数据,它工作正常,所有数据都已成功在表中查看。

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

谢谢!

【问题讨论】:

您尚未显示您拥有的标记,但乍一看似乎您在某些属性上弄错了大小写。 其实我用的是Razor,它是我添加索引视图时自动生成的。 请向我们展示您的查看代码。 @Sergey 我刚刚保存了我的编辑。 @Steve 非常感谢!这救了我 :) 从现在开始我会注意这一点。 【参考方案1】:

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

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

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 应该能够完全填充您的类实例。

【讨论】:

【参考方案2】:

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

还有 string select = @"Select * from contacts";

  [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; 

【讨论】:

以上是关于ASP.NET MVC Web App 从 MySQL 数据库中获取不完整的数据的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc 应用Bundle(捆绑和微小)压缩技术 启用 BundleConfig 配置web.config

Building a Web App with ASP.NET Core, MVC, Entity Framework Core, Bootstrap, and Angular

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?

将Asp.Net WebAPI从AngularJS App的Asp.Net MVC站点移动到一个单独的站点

ASP.NET Web API 从 MVC 4 控制器失败

从 Razor View-MVC3 ASP.NET 中的 Web.config 访问键值