【问题标题】:Need help creating / using a collection within a class (C#, ASP.Net, MVC)需要帮助在类中创建/使用集合(C#、ASP.Net、MVC)
【发布时间】:2017-08-22 21:11:31
【问题描述】:

我正在尝试创建一个允许将电影存储在数据库中的小型网络应用程序。我有这个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
}

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

var jurassicPark = new Movie
{
    Title = "Jurassic Park",
    Synopsis = "Dinosaurs go crazy on an island.",
    MoviePic = "jurassicLogo.jpg"
};

所有这些都很好,但我还想添加一个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";
}

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

public enum Rating
{
    GRated = "G.jpg",
    PgRated = "PG.jpg",
    Pg13Rated = "PG13.jpg",
    RRated = "R.jpg"
}

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

看起来这应该超级简单,但我对 ASP.Net 还是有点陌生​​,我在这个方面遇到了很多麻烦。

【问题讨论】:

  • 我确实尝试过,但我不知道如何分配评级(见底部段落)
  • 我在底部提到过尝试
  • enum 是正确的选择,因为您知道它们永远不会改变 - 但枚举必须是整数类型(char 除外) - 通常是 int,但也可以是 byte、@987654337 @ 等。该值不能是 string。如果要将Rating.GRated 显示为“g.jpg”,则使用[Display] 属性
  • 请考虑在多个国家/地区使用多种分级系统,并且电影可以重新分级(在编辑、上诉或事件之后)。虽然您一开始可能不想实现如此复杂的模型,但它可能会影响您选择实现当前更简单的模型的方式。例如@Shyju 的answer。 (这里有竞争模式和反模式。)

标签: c# asp.net asp.net-mvc class enums


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多