【问题标题】:Populate submodel dependent on model id根据模型 ID 填充子模型
【发布时间】:2014-04-11 08:47:13
【问题描述】:

首先抱歉,如果我的标题难以理解。我还在学习,所以请原谅。我搜索了 StackOverflow,但没有发现任何可以解决的问题。 所以...我正在自学 MVC 和 C#,我决定创建小型博客应用程序。我正在使用 N 层架构,其中包含 Blog.Back(管理面板前端的东西和使用 Logic 中的 ModelProviders 来操作数据的控制器)、包含 EDMX 的 Blog.DAL、包含 Models 和 ModelProviders 的 Blog.Logic。我有这个模型:



    public class CategoryModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List Posts { get; set; }

        public CategoryModel()
        {
            Posts = new List();
        }
    }

其中包含初始化空帖子的构造函数,但我不知道如何用数据填充它,现在如果我循环遍历我的 CategoryModel 以列出类别并在我的视图中计数(@Model.Posts.Count ()) 它总是返回 0。有什么想法吗?请详细回答。

对不起,如果它是重复的。我尝试搜索,但没有找到类似的东西。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    您必须创建一个 CategoryModel 对象并用一些数据填充它,例如:

    var model = new CategoryModel
    {
        Id = 1,
        Name = "Some Name",
        Posts = new List<Post>
        {
            new Post() {
                SomeProperty = "Some Property"
            },
            new Post() {
                SomeProperty = "Some Property"
            }
        }
    };
    

    然后您可以使用以下代码遍历它的 Posts 属性:

    foreach (var post in model.Posts)
    {
        Console.WriteLine("Property: ", post.SomeProperty);
    }
    

    也许这不是一个完美的例子,但我希望它能对你有所帮助。

    【讨论】:

    • 也许我不清楚。我已经有 CategoryModel 和 PostModel,它们反映了数据库 Category 和 Post 中的字段,并且我在 DB 中有数据,所以例如,如果我有 3 个具有 Sport 类别的帖子,我需要能够在不将其填充到模型之外的情况下对它们进行计数.在我切换到 n 层和存储库模式方法之前,我没有创建模型,但是我使用了 EDMX 的属性,当我使用 @model.Posts.Count() 并且它工作正常,但现在我觉得模型是'未填满。
    • 那我觉得你需要做的就是查询数据库,返回category的帖子总数……
    【解决方案2】:

    实际上我应该用一种方法来填充模型,将基本模型映射到我的模型,对我来说是:

    
    
        public static CategoryModel From(Category data, bool deep = false)
        {
                return new CategoryModel()
                {
                    Id = data.Id,
                    Name = data.Name,
                    Posts = data.Posts.Select(p => PostModel.From(p)).ToList()
                };
        }
    
    

    但是我陷入了 PostModel 调用 CategoryModel 而 CategoryModel 调用 PostModel 的无穷无尽的麻烦。所以我给了第二个参数“deep”。就在这里。 Count 就像一个魅力一样工作,并且模型被填充。

    
    
        public static CategoryModel From(Category data, bool deep = false)
        {
            if (deep)
            {
                return new CategoryModel()
                {
                    Id = data.Id,
                    Name = data.Name,
                    Posts = data.Posts.Select(p => PostModel.From(p)).ToList()
                };
            }
            else
            {
                return new CategoryModel()
                {
                    Id = data.Id,
                    Name = data.Name
                };
            }
        }
    
    

    它正在工作,但它正确吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2010-10-26
      • 2011-06-14
      相关资源
      最近更新 更多