Asp.net mvc Asp.NETMVC动态绑定多对多实体

Asp.net mvc Asp.NETMVC动态绑定多对多实体,asp.net-mvc,Asp.net Mvc,我在创建用于捕获多对多关系的视图时遇到问题 以下是模型 要为其创建视图的模型 public class Service : Entity { [ForeignKey("ServiceType")] public int ServiceTypeId { get; set; } [Required] public string ProviderAccountName { get; set; } public virtual ServiceType Serv

我在创建用于捕获多对多关系的视图时遇到问题

以下是模型

要为其创建视图的模型

public class Service : Entity
{
    [ForeignKey("ServiceType")]
    public int ServiceTypeId { get; set; }

    [Required]
    public string ProviderAccountName { get; set; }

    public virtual ServiceType ServiceType { get; set; }

    public virtual ICollection<Parameter> Parameters { get; set; }// this thing right here I want to capture many Parameters dynamically added by the user

    public Service()
    {
        this.Parameters = new List<Parameter>();
    }
}
公共类服务:实体
{
[外键(“服务类型”)]
public int ServiceTypeId{get;set;}
[必需]
公共字符串ProviderAccountName{get;set;}
公共虚拟服务类型ServiceType{get;set;}
公共虚拟ICollection参数{get;set;}//就在这里,我想捕获用户动态添加的许多参数
公共服务()
{
this.Parameters=newlist();
}
}
现在这里真正的问题是,参数本身有自己的CRUD操作视图,并且将从那里创建。我只想将参数绑定到正在创建的服务实体,如果我们提供了一个包含列出的所有参数的表,并通过复选框允许用户检查他想要包含的参数,那么会容易得多。但是,在我的情况下,用户必须有一个添加链接,单击该链接将生成一个新的参数行,并应用Select2 autocomplete,用户可以在其中选择该参数。
我想知道我是否可以使用BeginCollectionItem来实现这一点,但我不知道如何实现,因为当我尝试时,它给了我Paramater中必需字段的ModelErrors,就好像它正在创建新参数以插入DB

编辑器的局部视图如下所示

@using (Html.BeginCollectionItem("Parameters"))
{
    <div style="width: 100%;">
        @Html.TextBoxFor(m => m.CategoryID, new { @class = "ParamCategoryId" })
        <span>&nbsp;</span>
        @Html.TextBoxFor(m => m.ID, new { @class = "ParamId" })
        <span>&nbsp;&nbsp;&nbsp;</span>
        <span id="paramDesc"></span>
        <span>&nbsp;&nbsp;&nbsp;</span>
    </div>
}
@使用(Html.BeginCollectionItem(“参数”))
{
@TextBoxFor(m=>m.CategoryID,新的{@class=“ParamCategoryId”})
@TextBoxFor(m=>m.ID,新的{@class=“ParamId”})
}
我猜BeginCollectionItem在这里对我没有帮助,此外,我面临的问题不止几个,正如我们所看到的,我正在使用select2插件,已经使用类将其应用到元素中,这不符合预期,每次生成新行时,当触发“initSelection”时,上面所有行的值都重置为空白


有没有更好的方法可以做到这一点,我觉得可能会让事情变得复杂…?

“它给了我Paramater中必填字段的ModelErrors,就好像它正在创建新参数以插入到DB中…”这不是故意的吗?您已将参数集合标记为虚拟,这表明它是一个导航属性。因此,当您插入服务实体时,参数集合中的项也将被插入。那么我需要更改模型吗?我需要的是能够在创建时动态地将现有实体从DB添加到该服务实体。数据库中已经创建的参数将链接到服务,我已经创建了与FluentAPI的多对多关系…如果参数和服务之间存在关系,请在视图中编辑参数。发布字段后,您在数据库插入/更新时遇到验证错误,那么它是否正常工作?如果编辑服务的Parameters集合,则相关实体也会在Parameters表中更新。如果问题是参数总是插入而不是更新(如数据库中已经存在的关系),则还需要发布ForeignKey。所以我假设您的参数类中有类似于[ForeignKey]ServiceID的东西。将其作为隐藏字段也包含在表单中。