【问题标题】:Edit object with ICollection使用 ICollection 编辑对象
【发布时间】:2016-02-18 22:48:36
【问题描述】:

当我使用 Virtual Icollection 编辑类时,Icollection 变为空。 我没有在视图中使用 Icollection,所以我尝试使用 elementat() 隐藏。

型号

public class Event
{
    public Event() { EventId = Guid.NewGuid(); }

    public Guid EventId { get; set; }

    public string contenu { get; set; }
    public virtual ICollection<BookedUser> BookedUsers { get; set; }
}

查看

@model WebApplication2.Models.Event
if (Model.BookedUsers.Count != null)
{
    for (int i = 0; i < Model.BookedUsers.Count(); i++)
    {
         @Html.HiddenFor(m => m.BookedUsers.ElementAt(i).BookedUserId)

    }
}

【问题讨论】:

  • 如果你不在 View 中使用它,为什么还要在 ViewModel 中包含它?
  • 问题是什么?
  • 我通常在不使用对象时将其隐藏在视图中,这是我找到的方式,不会丢失数据。我正在寻找一种使用 Icollection 的方法。
  • 模型和视图已经创建好了,我正在寻找一种不改变一切的方法。

标签: c# asp.net-mvc


【解决方案1】:

简单地说,您不能使用 ICollection,因为 Razor 无法解析对 ElementAt(i) 的调用以创建正确索引的输入名称。你需要一个列表,所以你可以传递m.BookedUser[i].BookedUserId

这是使用视图模型的一个重要原因,因为实体,即持久化到数据库的类,经常与视图的需求不一致。创建一个视图模型,如:

public class EventViewModel
{
    public string contenu { get; set; }
    public List<BookedUser> BookedUsers { get; set; }
}

然后映射到/从这个和Event

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 2014-06-22
    • 2021-03-05
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多