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还是有些新手,我在这个问题上遇到了很多麻烦.
恕我直言,更好的解决方案是创建一个单独的查找表来存储可能的评级列表,并在电影表中有一个外键.在数据库级别,这确保您只存储其中一个值(参照完整性),即使您的代码未能设置正确的值
您可以向此查找表添加其他属性.例如,每个评级的徽标图像,每个评级的描述等.
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)
话虽如此,你可以简单地使用枚举并存储字符串.但是上述查找表的方法允许您保留每个评级项的附加属性.