Asp.net mvc 3 Mvc3 listboxfor helper方法在编辑实体时选择的项

Asp.net mvc 3 Mvc3 listboxfor helper方法在编辑实体时选择的项,asp.net-mvc-3,html-helper,Asp.net Mvc 3,Html Helper,我正在使用razor开发一个asp.net mvc3演示应用程序,该应用程序位于 我有mvc脚手架,Poco对象作为实体,mvc脚手架正在运行 public class Project { public int ProjectId { get; set; } [Required(ErrorMessage="please enter name")] public string Name { get; set; } public string Url { get; s

我正在使用razor开发一个asp.net mvc3演示应用程序,该应用程序位于

我有mvc脚手架,Poco对象作为实体,mvc脚手架正在运行

public class Project
{
    public int ProjectId { get; set; }
    [Required(ErrorMessage="please enter name")]
    public string Name { get; set; }
    public string Url { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime UpdatedOn { get; set; }
    public bool isFeatured { get; set; }
    public bool isDisabled { get; set; }
    public int GroupId { get; set; }

    public virtual Group Group { get; set; }

    [Required(ErrorMessage="Please select atleast one tag")]
    public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public int TagId { get; set; }
    public string Name { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime UpdatedOn { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
}
public class Group
{
    public int GroupId { get; set; }
    public string Name { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime UpdatedOn { get; set; }

    public virtual ICollection<Project> Projects { get; set; }
}
公共类项目
{
公共int ProjectId{get;set;}
[必需(ErrorMessage=“请输入名称”)]
公共字符串名称{get;set;}
公共字符串Url{get;set;}
public DateTime CreatedOn{get;set;}
public DateTime UpdatedOn{get;set;}
公共布尔值为{get;set;}
公共布尔被禁用{get;set;}
public int GroupId{get;set;}
公共虚拟组{get;set;}
[必需(ErrorMessage=“请至少选择一个标记”)]
公共虚拟ICollection标记{get;set;}
}
公共类标签
{
public int TagId{get;set;}
公共字符串名称{get;set;}
public DateTime CreatedOn{get;set;}
public DateTime UpdatedOn{get;set;}
公共虚拟ICollection项目{get;set;}
}
公共课组
{
public int GroupId{get;set;}
公共字符串名称{get;set;}
public DateTime CreatedOn{get;set;}
public DateTime UpdatedOn{get;set;}
公共虚拟ICollection项目{get;set;}
}
第一个问题 从上面的代码中可以看出,项目和标记实体之间存在多对多关系。 现在我有办法实现一个新的项目特性,其中一个bug是标记为所需的项目的标记属性,但如果您不选择任何标记,则客户端站点验证将不起作用

第二个问题 一旦使用多个标记创建了项目,如果您决定对其进行编辑,如何显示与项目关联的选定标记

您可以在以下位置找到完整的源代码:


我已经成功地进行了验证,现在在编辑项目时,标签被选中

但现在我遇到了另一个问题,比如说我创建了一个带有标记“asp.net”的新项目,然后我编辑了这个项目,只选择了一个标记“wordpress”。现在,如果我发布表单模型绑定工作,但我的上下文无法更新项目的标记集合属性?在我看来,当It为我的项目实体找到一个复杂的类型属性时,It实体框架在这里会出现问题吗

    public void InsertOrUpdate(Project project)
    {
        if (project.ProjectId == default(int)) {
            // New entity
            foreach (var tag in project.Tags)
            {
                context.Entry(tag).State = EntityState.Unchanged;
            }
            context.Projects.Add(project);
        } 
        else {
            // Existing entity
            //every property of project entity is 
            //getting updated only tags property left out :(
            context.Entry(project).State = EntityState.Modified;
        }
    }

我已经设法使验证工作和标签现在得到选择,而编辑一个项目

但现在我遇到了另一个问题,比如说我创建了一个带有标记“asp.net”的新项目,然后我编辑了这个项目,只选择了一个标记“wordpress”。现在,如果我发布表单模型绑定工作,但我的上下文无法更新项目的标记集合属性?在我看来,当It为我的项目实体找到一个复杂的类型属性时,It实体框架在这里会出现问题吗

    public void InsertOrUpdate(Project project)
    {
        if (project.ProjectId == default(int)) {
            // New entity
            foreach (var tag in project.Tags)
            {
                context.Entry(tag).State = EntityState.Unchanged;
            }
            context.Projects.Add(project);
        } 
        else {
            // Existing entity
            //every property of project entity is 
            //getting updated only tags property left out :(
            context.Entry(project).State = EntityState.Modified;
        }
    }