【问题标题】:MVC .Net Core 2.0 | Query SQL Server database and return results in grid-viewMVC .Net Core 2.0 |查询 SQL Server 数据库并在网格视图中返回结果
【发布时间】:2017-12-13 15:34:58
【问题描述】:

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

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

本质上,这个数据库包含一个包含人员列表的表。我只想通过一个简单的查询在我的一个应用程序页面上的网格视图中显示该数据;

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

我想要一些建议,无论是代码还是指向一个好的资源/教程的链接,它可以引导我完成此操作。

请记住,我在 Web 开发之外学习 MVC 之后,我之前的经验只是将数据表绑定到 ASP Web 表单中的网格视图。

谢谢。

【问题讨论】:

  • 为什么投反对票?在我问这个问题之前我应该​​知道答案吗?
  • 别担心,stackoverflow 的开发人员非常具体,不明白有些人只是在学习,我给你打了高分,因为有人错误地评价了你。祝你好运!对了,我也在学习,问题很有帮助,也谢谢!

标签: .net sql-server database asp.net-core-2.0


【解决方案1】:

在 MVC 中,没有可绑定的网格视图,也没有与 Web 表单不同的视图状态。对于模型部分,最好将其扩展为使用与模型/域模型分开的视图模型。

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

模型(可以映射到数据库表/列):

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);
}

视图(您将在其中显示视图模型。实际上没有“绑定”的概念和开箱即用的视图状态,例如 web 表单,也没有太多内置控件,如 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 sitethis one too 不会出错。

【讨论】:

    【解决方案2】:

    我的建议是从 .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 后,您可能会发现您实际上需要较旧的“完整”实体框架,以下是关于差异的简短摘要:https://docs.microsoft.com/en-us/ef/efcore-and-ef6/features

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-21
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2016-10-10
      • 1970-01-01
      相关资源
      最近更新 更多