MVC .NET - 规范化数据模型

时间:2015-01-24 19:47:00

标签: c# asp.net-mvc-4

我对MVC很新,我在尝试使用规范化数据模型(只是电影列表及其演员列表)时遇到了麻烦。我有以下三种数据模型设置(简化),这是一种基本的多对多关系:

public class Movie
{
        public int Movie_Id { get; set; }
        public string Title { get; set; }
        public string Director { get; set; }
        public DateTime Release_Date { get; set; }

        public MovieCast movieCast { get; set; }
}

public class MovieCast
{
        public int Movie_Actor_Id { get; set; }
        public int Movie_Id { get; set; }
        public int Actor_Id { get; set; }

        public Movie movie { get; set; }
        public Actor actor { get; set; }

}

public class Actor
{
        public int Actor_Id { get; set; }
        public string First_Name { get; set; }
        public string Last_Name { get; set; }
        public string Gender { get; set; }
        public DateTime Birthdate { get; set; }

        public MovieCast movieCast { get; set; }
}

我希望从MovieCast控制器中显示整个演员列表。在Index.cshtml文件中,我有以下

<tr>
    <th>
        @Html.DisplayNameFor(model => model.Movie_Id)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Actor_Id)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.actor.First_Name)
    </th>
    <th></th>
</tr>

最终的DisplayNameFor给我一个错误,说“MovieCast”不包含“actor”的定义,即使它在模型中明确声明。

有没有人有任何想法,或者我是否需要重新考虑解决方案?

1 个答案:

答案 0 :(得分:0)

我知道电影有一个MovieCast,这是参与电影的演员列表。

另外,我永远不会在我的类中使用类似关系的结构......我更喜欢使用更面向对象的结构。

我会将其简化为:

public class Movie
{
    public int Id {get;set;}
    public string Title {get;set;}
    public string Director {get;set;}
    public DateTime ReleaseDate {get;set;}

    public List<Actor> Cast {get;set;}

}

public enum Gender {
    Male, Female
}


public class Actor {

    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Gender Gender { get; set; }
    public DateTime Birthdate { get; set; }
}

在我看来,我会这样做:

@model List<Movie>


@foreach (var movie in Model){

<h1>@movie.Title</h1>

<h3>Movie Details:</h3>

<table>
    <tr>
        <td>Director:</td><td>@movie.Director</td>
    </tr>
    <tr>
        <td>Release Date:</td><td>@movie.ReleaseDate</td>
    </tr>
</table>

<h3>Cast</h3>

<ul>
    @foreach(var actor in movie.Cast)
    {
    <li>
        @actor.FirstName
    </li>
    }
</ul>

}

不确定是否编译,但试一试:D