在一个表单中添加多个嵌套项

时间:2013-04-01 08:48:57

标签: asp.net asp.net-mvc forms razor asp.net-mvc-4

我有一个复杂的问题。我需要在ASP.NET MVC4应用程序中的一个表单中添加多个项目。我有三种模式:

电影:

public class Movie
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public int Duration { get; set; }
}

电影中的所有语言:

public class MovieLanguages
{
    [ForeignKey("Movie")]
    public int MovieId { get; set; }

    [ForeignKey("Language")]
    public int LanguageId { get; set; }

    public virtual Movie Movie { get; set; }
    public virtual Language Language { get; set; }
}

语言:

public class Language
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我理解如何保存用户的输入,如果它只是在一个表单中使用这样的简单行的Movie模型:

@Html.EditorFor(model => model.Movie.Name)

问题是用户还应该能够为表单内的电影添加多种语言(模型MovieLanguages)。因此,当显示表单时,用户将具有以下内容:

enter image description here

用户将有一个语言下拉列表,当他从列表中选择一种语言并单击“添加语言”按钮时,语言将显示在下方。单击“保存电影”时,所有选定的语言也应保存到表MovieLanguages中的数据库中。如果Movie ID只有在存储在数据库中之后才能知道,如何处理这个问题?当存在这种一对多的关系时,我不确定如何解决View和Controller中多个模型的问题。有任何想法吗? :)

谢谢。

1 个答案:

答案 0 :(得分:0)

您所需要的只是Model Binding To A ListModel Binding to Arrays, Lists, Collections, Dictionaries。其余的是一点点javascript,可以在Add Language点击动态生成所需的html。