MVC .Net 核心 2.0 |在网格视图中查询 SQL 服务器数据库和 return 结果

MVC .Net Core 2.0 | Query SQL Server database and return results in grid-view

我目前正在学习 .net Core 2.0 并构建了一个相当简单的 Web 应用程序,但是,我在 MVC 结构的 'Model' 方面做得并不多。

我在单独的 Windows 服务器 VM 上有一个测试 SQL 服务器 运行,我想将其引入应用程序。

基本上这个数据库包含一个 table 和一个人员列表。我只想通过一个简单的查询在我的一个应用程序页面上的 gridview 中显示该数据;

SELECT title, forename, surname, address_string, telnum FROM people;

我想要一些建议,可以是代码,也可以是 link 一个很好的资源/教程,它会引导我完成如何做到这一点。

请记住,我在很长一段时间没有进行 Web 开发之后正在学习 MVC,我之前的经验只是将数据 table 绑定到 ASP Web 表单中的 gridview .

谢谢。

我的建议是从 .Net Core 2.0 和 Entity Framework Core 上的 Microsoft Docs 开始:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

总而言之,您将使用 .Net Core 作为您的 MVC 层,并且您将利用 Entity Framework Core 作为您的 ORM(基本上是您的数据库交互模型)。一旦您熟悉了 EF Core,您可能会发现您实际上需要旧的 "full" Entity Framework,这里是对差异的简短总结:https://docs.microsoft.com/en-us/ef/efcore-and-ef6/features

还有其他非 MS ORM,但我会坚持使用 Microsoft 堆栈开始,因为它通常都是为协同工作而设计的,并且 Microsoft 提供了很好的端到端教程。

完成第一个教程后,您可能还需要考虑研究一个客户端库来处理您的网格、搜索、排序等。DataTables 是一个很受欢迎的库,可以很好地与 JQuery 和 Bootstrap(在默认的 MVC 模板中)开箱即用 (https://datatables.net/),您还可以在此站点上找到对它的良好支持。

在 MVC 中,没有要绑定的 gridview,也没有与 webforms 不同的视图状态。对于模型部分,最好将其扩展为使用与 model/domain 模型分开的视图模型。

将视图模型视为可以让您更好地控制来塑造来自数据库的数据的东西。请注意,在下面的 PersonViewModel 中,我选择排除映射到 table 的主键的 PersonID。我还添加了一个 returns 这个人的全名(姓氏,名字)的字段。这些更改仅针对视图模型,不会影响域模型。

模型(可以映射到数据库table/columns):

public class Person
{
    [Key]
    public Guid PersonID { get; set; }
    public string Title { get; set; }
    public string ForeName { get; set; }
    public string SurName { get; set; }
    public string TelNum { get; set; }
    public string AddressString { get; set; }
}

ViewModel(本质上可以让您更好地控制页面上显示的内容):

public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string Telephone { get; set; }
    public string Title { get; set; }

    public string FullName 
    {
        get { return string.Format("{0}, {1}", this.LastName, this.FirstName); }
    }
}

控制器代码(您可以在其中将字段的值从域模型传输到视图模型。为简单起见,我选择手动分配字段值,但有像 AutoMapper 这样的工具简化这个):

public ActionResult Index()
{
    // returns List<Person> from the database
    var peopleList = datasource.GetPeople();

    var peopleVM = new List<PersonViewModel>();

    //create a list of PersonViewModels
    foreach (person in peopleList)
    {
        var personVM = new PersonViewModel()
        {
             FirstName = person.ForeName;
             LastName = person.SurName;
             Address = person.AddressString;
             Title = person.Title;
             Telephone = person.TelNum;                 
        };
        peopleVM.Add(personVM);
    }

    return View(peopleVM);
}

视图(显示视图模型的地方。实际上没有 "binding" 的概念,并且没有开箱即用的视图状态,就像在 webforms 中一样,也没有像 gridviews/listviews 这样的内置控件,除非您将使用 MVC 扩展,例如 these):

@model List<Namespace.Models.PersonViewModel>

<table>
    @foreach (person in Model)
    {
        <tr>
            <td>person.FullName</td>
            <td>person.Title</td>
            <td>person.Telephone</td>
            <td>person.Address</td>
        </tr>
    }
</table>

至于好资源的链接,this site and this one too绝对不会出错。