Mvc3 listboxfor辅助方法在编辑实体时选择的项目

时间:2011-09-17 22:52:23

标签: asp.net-mvc-3 html-helper

我正在开发一个带有剃刀的asp.net mvc3演示应用程序,该应用程序托管在http://portfolio-6.apphb.com/Projects

我有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; }
}

第一个问题 从上面的代码中你可以看到我在Project和Tag实体之间有很多关系。 现在我可以实现新项目功能,其中一个错误是标记为必需的项目的标签属性,但如果您没有选择任何标记,则客户端站点验证不起作用。

第二个问题 一旦使用mutliple标签创建项目,如果您决定编辑它,如何显示与项目相关的选定标签???

您可以在https://github.com/najamsk/PortfolioManger

找到完整的源代码

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我已经设法进行验证工作,现在在编辑项目时选择了标签。

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

    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;
        }
    }