在类构造器中将icollection设置为列表时,如何通过索引从icollection中获取项目?

弗雷德·约翰逊(Fred Johnson)

我有一组消息,每个消息由以下项定义:

namespace DatabaseDesign.Models
{
    public class PrivateMessageDetail
    {
        public int PrivateMessageDetailId { get; set; }
        public DateTime MessageDate { get; set; }
        public string FromUser { get; set; } // Don't need ToUser, it's already in header
        public string Message { get; set; }

        public int PrivateMessageHeaderId { get; set; }
        public virtual PrivateMessageHeader PrivateMessageHeader { get; set; }
    }
}

两个用户之间的消息集合保存在Messages iCollection中,该集合被重新定义(我认为吗?)作为此类构造函数中的列表:

namespace DatabaseDesign.Models
{
    public class PrivateMessageHeader
    {
        public int PrivateMessageHeaderId { get; set; }
        public PrivateMessageHeader() { this.Messages = new List<PrivateMessageDetail>();  }
        public DateTime TimeStamp { get; set; } // Date of the start of thread
        public string User1 { get; set; }
        public string User2 { get; set; }  // this could be made to a list to allow multiples

        public int numberOfMessages { get; set; }
        public virtual ICollection<PrivateMessageDetail> Messages { get; set; }
    }
}

在我的Details控制器中,我想viewBag返回私人消息的历史记录(即PrivateMessageHeader的实例)

    public ActionResult Details()//string userTo, string userFrom)
    {
        string userTo = "mike", userFrom = "tim";

        var MsgHistory = PrivateMessageRepository.GetMessageHistoryByID(userTo, userFrom);
        string MsgStr = "";
        foreach (var msg in MsgHistory.Messages)
        {
            //how do I get the message & user name from each MessageDetail in the Messages List of the MessageHeader class?
            //MsgStr += MsgHistory.Messages[msg].
        }
        return View();   
    }

线

var MsgHistory = PrivateMessageRepository.GetMessageHistoryByID(userTo, userFrom);

返回正确的PrivateMessageHeader(即2个用户之间的消息历史记录)。我似乎无法获取数据。

尝试1:我把整个东西都通过了viewbag,并试图以这种方式取出数据。经过5分钟的挫折后,我认为这可能并不是最好的方法。当然,将数据存储为那个坏男孩的字符串和viewbag会更有效吗?

因此,我继续进行了“细节”控制器中当前显示的操作,并弄乱了尝试访问“消息列表/ iCollection”中保存的PrivateMessageDetails的方法。它不会让我在foreach循环中为它们建立索引,说无法以这种方式引用iCollection ....但是在构造函数中,我将其定义为列表???

我的查询:

  1. 这些是实体框架6类。如果我定义了公共虚拟ICollection Messages {get; 放; }作为公共虚拟列表消息{get; 放; }它仍然可以正常工作吗?

  2. 如果是这样,为什么所有MSDN示例都使用ICollection?

  3. 有没有一种有效的方法来从iCollection中获取消息和“ userFrom”变量?

这就是我想要做的:

var MsgHistory = PrivateMessageRepository.GetMessageHistoryByID(userTo, userFrom);
        string MsgStr = "";
        foreach (var msg in MsgHistory.Messages)
        {
            MsgStr += MsgHistory.Messages[msg].UserFrom +": "+MsgHistory.Messages[msg].Message+"<br>";
        }
        Viewbag.Message = MsgStr;
        return View();
聚苯乙烯

无需MsgHistory.Messages访问列表一样尝试访问foreach-loop中 的iterator变量您要遍历的列表中的当前项。因此,您无需从列表中获取该项目。试试这个:

foreach (var msg in MsgHistory.Messages)
{
    MsgStr += msg.UserFrom + ": " + msg.Message + "<br>";
}

但是,我强烈建议不要在MVC控制器中构造HTML。这就是意见。相反,使用您的控制器来构造视图模型,然后将其传递给视图,如下所示:

public ActionResult Details()//string userTo, string userFrom)
{
    var MsgHistory = PrivateMessageRepository.GetMessageHistoryByID(userTo, userFrom);
    var viewModel = MsgHistory.Messages.ToList();
    return View(viewModel);   
}

然后在视图中构造HTML,如下所示:

@model IEnumerable<DatabaseDesign.Models.PrivateMessageDetail>
...
@foreach(var msg in Model) {
    @:@msg.UserFrom: @msg.Messages<br>
}

或者可能使用匿名类型,如下所示:

public ActionResult Details()//string userTo, string userFrom)
{
    var MsgHistory = PrivateMessageRepository.GetMessageHistoryByID(userTo, userFrom);
    var viewModel = MsgHistory.Messages.Select(x => new { x.UserFrom, x.Message }).ToList();
    return View(viewModel);   
}

使用dynamic视图模型:

@model IEnumerable<dynamic>
...
@foreach(var msg in Model) {
    @:@msg.UserFrom: @msg.Messages<br>
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类构造器中将icollection设置为列表时,如何通过索引从icollection中获取项目?

来自分类Dev

如何在ICollection中的特定索引中添加项目?

来自分类Dev

从通用类获取ICollection类型的属性的列表

来自分类Dev

从IQueryable <ICollection> LINQ查询中获取ICollection

来自分类Dev

遍历ICollection并设置为null

来自分类Dev

如何在实现IDictionary和ICollection的类的实例上在Powershell中设置属性

来自分类Dev

如何从ICollection检索类对象?

来自分类Dev

设置,通过指针(而不是通过索引)从类中获取数据

来自分类Dev

通过反射获取所有ICollection属性

来自分类Dev

获取类型为ICollection <BaseEntity>的属性

来自分类Dev

如何通过Linq获取List <T>中每个为空的项目的索引

来自分类Dev

如何从通用列表中删除基于类与构造函数的项目?

来自分类Dev

如何通过PUT方法更新ICollection的属性?

来自分类Dev

在Linq查询中将项目添加到ICollection

来自分类Dev

如何在 ArrayObject 类中获取项目索引

来自分类Dev

clojure:如何从向量中通过索引获取多个项目

来自分类Dev

从数据库中获取对象的父ID(由MVC通过虚拟ICollection创建)

来自分类Dev

如何在C#中将ICollection <ICollection <int >>转换为List <List <int >>

来自分类Dev

MVC-列表中的ICollection在POST上不会返回到控制器

来自分类Dev

如何从MVC 5中的模型读取ICollection

来自分类Dev

如何从不同的类中获取数组列表中的项目

来自分类Dev

错误:如何通过元素的位置索引从列表中获取元素?

来自分类Dev

如何通过基于 python 中的匹配属性迭代字典的键/值对,为列表中的每个项目分配新类?

来自分类Dev

MVC ICollection <IFormFile> ValidationState始终设置为“已跳过”

来自分类Dev

将AutoMapper约定设置为不合并ICollection属性

来自分类Dev

如何在MVC的Contoller中将ICollection用于SelectList?

来自分类Dev

如何在MVC的Contoller中将ICollection用于SelectList?

来自分类Dev

如何基于属性值获取类中的项目列表

来自分类Dev

通过特定索引从列表中删除项目

Related 相关文章

  1. 1

    在类构造器中将icollection设置为列表时,如何通过索引从icollection中获取项目?

  2. 2

    如何在ICollection中的特定索引中添加项目?

  3. 3

    从通用类获取ICollection类型的属性的列表

  4. 4

    从IQueryable <ICollection> LINQ查询中获取ICollection

  5. 5

    遍历ICollection并设置为null

  6. 6

    如何在实现IDictionary和ICollection的类的实例上在Powershell中设置属性

  7. 7

    如何从ICollection检索类对象?

  8. 8

    设置,通过指针(而不是通过索引)从类中获取数据

  9. 9

    通过反射获取所有ICollection属性

  10. 10

    获取类型为ICollection <BaseEntity>的属性

  11. 11

    如何通过Linq获取List <T>中每个为空的项目的索引

  12. 12

    如何从通用列表中删除基于类与构造函数的项目?

  13. 13

    如何通过PUT方法更新ICollection的属性?

  14. 14

    在Linq查询中将项目添加到ICollection

  15. 15

    如何在 ArrayObject 类中获取项目索引

  16. 16

    clojure:如何从向量中通过索引获取多个项目

  17. 17

    从数据库中获取对象的父ID(由MVC通过虚拟ICollection创建)

  18. 18

    如何在C#中将ICollection <ICollection <int >>转换为List <List <int >>

  19. 19

    MVC-列表中的ICollection在POST上不会返回到控制器

  20. 20

    如何从MVC 5中的模型读取ICollection

  21. 21

    如何从不同的类中获取数组列表中的项目

  22. 22

    错误:如何通过元素的位置索引从列表中获取元素?

  23. 23

    如何通过基于 python 中的匹配属性迭代字典的键/值对,为列表中的每个项目分配新类?

  24. 24

    MVC ICollection <IFormFile> ValidationState始终设置为“已跳过”

  25. 25

    将AutoMapper约定设置为不合并ICollection属性

  26. 26

    如何在MVC的Contoller中将ICollection用于SelectList?

  27. 27

    如何在MVC的Contoller中将ICollection用于SelectList?

  28. 28

    如何基于属性值获取类中的项目列表

  29. 29

    通过特定索引从列表中删除项目

热门标签

归档