需要帮助在类中创建/使用集合(C#,ASP.Net,MVC)

Nat*_*n R 1 c# asp.net asp.net-mvc enums class

我正在尝试创建一个允许将电影存储在数据库中的小型Web应用程序.我有这Movie门课:

public class Movie
{
    public string Title { get; set; }
    public string Synopsis { get; set; }
    public List<string> Actors { get; set; }
    public DateTime StartDate { get; set; }
    public string MoviePic { get; set; } // path to image
    public int RunningTime { get; set; } // in minutes
    public string Trailer { get; set; } // youtube url
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我正在尝试使用该类创建一部电影:

var jurassicPark = new Movie
{
    Title = "Jurassic Park",
    Synopsis = "Dinosaurs go crazy on an island.",
    MoviePic = "jurassicLogo.jpg"
};
Run Code Online (Sandbox Code Playgroud)

所有这些都很有效,但我还想添加一个Rating属性,该属性只能是表示该评级符号图像的四个字符串之一.换句话说,我不想只有一个public string Rating可以是任何旧字符串的属性.我想只在四个特定字符串之间进行选择.

例如,我最初把它放在Movie类中:

public class Rating
{
    public string GRating = "g.jpg";
    public string PgRating = "pg.jpg";
    public string Pg13Rating = "pg13.jpg";
    public string RRating = "r.jpg";
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我做了一些谷歌搜索并尝试了这个:

public enum Rating
{
    GRated = "G.jpg",
    PgRated = "PG.jpg",
    Pg13Rated = "PG13.jpg",
    RRated = "R.jpg"
}
Run Code Online (Sandbox Code Playgroud)

这也行不通.我可以Movie.Rating.GRated在我的控制器中调用,但实际上我无法为电影分配评级.我尝试添加public Rating Rating { get; set; }到电影类,似乎它可能允许我jurassicPark在控制器中添加一个评级到我的对象,但它不喜欢我尝试的任何东西(例如:Rating = Movie.Rating.Pg13Rated给了我一个红色的波浪形).

看起来这应该是超级简单的,但我对ASP.Net还是有些新手,我在这个问题上遇到了很多麻烦.

Shy*_*yju 5

恕我直言,更好的解决方案是创建一个单独的查找表来存储可能的评级列表,并在电影表中有一个外键.在数据库级别,这确保您只存储其中一个值(参照完整性),即使您的代码未能设置正确的值

您可以向此查找表添加其他属性.例如,每个评级的徽标图像,每个评级的描述等.

public class Movie
{
    public int Id {set;get;}
    public string Title { get; set; }
    public string Synopsis { get; set; }
    public List<string> Actors { get; set; }
    public DateTime StartDate { get; set; }
    public string MoviePic { get; set; } // path to image
    public int RunningTime { get; set; } // in minutes
    public string Trailer { get; set; } // youtube url

    public int RatingId {set;get;}
    public Rating Rating { set;get;} 
}
public class Rating
{
   public int Id {set;get;}
   public string Name {set;get;} ;
   public string Description {set;get;} ;
   public string LogoImageUrl {set;get;} ;
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,你可以简单地使用枚举并存储字符串.但是上述查找表的方法允许您保留每个评级项的附加属性.