【问题标题】:ASP.NET MVC models that order table data对表数据排序的 ASP.NET MVC 模型
【发布时间】:2016-04-22 19:33:15
【问题描述】:

我创建了一个 MVC 项目。有一个默认视图和控制器。有一个模型已扩展为涵盖两个真实表和一个视图(db 视图)。在对数据进行排序之后,需要显示该视图和至少一个表。我只看到在线创建模型的“简单”示例;我不确定要搜索什么词。所以,我在自己的文件中有一个类,它定义了 db-view 中的列

    using System.Data.Entity;

    namespace XYZ_dbo.Models {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel.DataAnnotations;
        using System.ComponentModel.DataAnnotations.Schema;
        using System.Data.Entity.Spatial;
        using System.Linq;
        using System.Text;

        [Table("dbo.DockItemsByDept")]
        public partial class DockItemsByDept
        {
            public int Id { get; set; }

            [Required]
            [StringLength(128)]
            public string Name { get; set; }
            public int Dept { get; set; }
            public int Code { get; set; }
        }
    }

我有一个引用此类的模型定义:

    using System.Data.Entity;

    namespace XYZ.Models
    {
        public partial class XYZModel : DbContext
        {
            public XYZModel()
                : base("name=XYZModel")
            {
            }

            public virtual DbSet<DockItemsByDept> DockItemsByDept { get; set; }

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<DockItemsByDept>()
                    .Property(e => e.Id);
                modelBuilder.Entity<DockItemsByDept>()
                    .Property(e => e.Name)
                    .IsUnicode(false);
                modelBuilder.Entity<DockItemsByDept>()
                    .Property(e => e.Dept);
                modelBuilder.Entity<DockItemsByDept>()
                    .Property(e => e.Code);
            }
        }
    }

我可以进入index.cshtml 视图并说

    @model IEnumerable<ITG_Calendar_Reservations.Models.DockItemsByDept>

    <div class="content">
        @foreach (var log in Model)
        {
            <p>@log.Name</p>
        }
    </div>

但我只是得到了数据库生成的默认排序。我希望这个“视图”数据按Code 字段然后Name 字段排序,但我不知道应该在哪里应用这样的操作或过滤器。我认为这将在模型中,但我没有看到它应该去哪里,当我搜索答案时我没有找到任何有用的东西。

想法?

【问题讨论】:

  • 您的XYZModel 并不是真正的模型,而是用于管理程序和数据库之间模型状态的上下文。你可能想称之为XYZContext。它可能会让事情更容易理解。
  • 嗯,好的。我根本不会在这个问题上与你辩论。 Visual Studio 将其称为“模型”,并在设置初始数据库连接时为其命名。

标签: c# .net asp.net-mvc entity-framework


【解决方案1】:

试试这个:

 @foreach (var log in Model.OrderBy(m => m.Code).ThenBy(m => m.Name))

或者,您可以在将模型发送到视图之前对其进行排序。

【讨论】:

  • 酷!谢谢你。在发送到视图之前如何排序?
  • 几乎相同的方式,只需将订购代码移动到您从数据库中提取数据以填充模型的位置。尽管您的 代码 看起来相同,但排序实际上会发生在数据库中,如果您在 myModel = db.DockItemsByDepts.OrderBy(m =&gt; m.Code).ThenBy(m =&gt; m.Name) 之类的行中执行此操作会更有效
  • 对不起,我知道我一定很厚,但是您说“将订购代码移动到您从数据库中提取数据的位置”。我查看了上面的代码,但看不到那个地方/应该在哪里。这一切似乎都发生在幕后。
【解决方案2】:

您应该能够使用 Linq 根据需要对输出进行排序

foreach (var log in Model.OrderBy(m => m.Code).ThenBy(m => m.Name))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2012-04-05
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多