如何在mvc中绑定自定义模型类

时间:2015-11-09 03:44:06

标签: asp.net-mvc-4

我是MVC的新手。我正在开发一个项目,我已经创建了一个模型类以及上下文类,如果我在普通视图中查看记录,它正在运行。 但是,如果我尝试通过" Series_Name"来获取组中的数据;并将其绑定到同一个模型类中,它会给出错误。这是我的代码

这是Model类和DBContextClass

[Table("tblvideo")]
public class TVSerial
{
    [Key]
    public Int64 Video_ID { get; set; }
    public string Series_Name { get; set; }
    public string Season_No { get; set; }
    public string Episode_No { get; set; }
    public string Episode_Name { get; set; }
    public string Time_Duration { get; set; }
    public string File_Url_480p { get; set; }
    public string File_Url_720p { get; set; }
    public string Description { get; set; }
    public bool Is_Active { get; set; }
    public string Image_Url_Small { get; set; }
    public string Image_Url_Big { get; set; }   
} 

public class TvSerialContext : DbContext
{
    public DbSet<TVSerial> TvSerials { get; set; }
}

这是控制器类:

public class TvSerialController : Controller
{
    public ActionResult ListAllTvSerial()
    {
        try
        {
            TvSerialContext tvContext = new TvSerialContext();
            List<TVSerial> tv = tvContext.TvSerials.ToList();
            return View(tv);
        }
        catch (Exception ex)
        {
            return Content(ex.Message);
        }
    }
}

上面的代码按预期工作,但如果我这样做:

public ActionResult ListAllSeason(string serial)
{
    try
    {
        TvSerialContext tvContext = new TvSerialContext();
        List<TVSerial> tv = tvContext.TvSerials.Where(tvs => tvs.Series_Name == serial).Distinct().ToList();
        return View(tv);
    }
    catch (Exception ex)
    {
        return Content(ex.Message);
    }
}

它返回所有行,我只想要每个series_name和自定义字段中的单行&#34; Series_Name,Season_No,Image_Url_Big&#34; 我不知道如何实现这一目标。 获得结果:enter image description here

预期结果: - enter image description here

3 个答案:

答案 0 :(得分:2)

您可以通过创建视图模型并使用.GroupBy()子句

来完成此操作
public class TVSerialVM
{
  public string SeriesName { get; set; }
  public string SeasonNo { get; set; }
  public string ImageUrl { get; set; } 
}

以及投影到视图模型的查询

List<TVSerialVM> model = tvContext.TvSerials.Where(t => t.Series_Name == serial)
  .GroupBy(t => new { t.Series_Name, t.Season_No, t.Image_Url_Big })
  .Select(t => new TVSerialVM
  {
    SeriesName = t.Key.Series_Name,
    SeasonNo = t.Key.Season_No,
    ImageUrl = t.Key.Image_Url_Big
  }).ToList();

旁注:数据库中的重复数据(季节编号和图像网址)。您应该考虑将图像网址移动到与季节编号有关系的另一个表格。

答案 1 :(得分:1)

即使您正在使用distinct,您获得多个值的原因是Distinct方法不知道TVSerial的“相等”是什么。

您可以使用与IEqualityComparer的Distinct。 https://msdn.microsoft.com/en-us/library/vstudio/bb338049(v=vs.100).aspx

答案 2 :(得分:0)

不保证对自定义对象不区分,它不知道要比较什么。我过去曾使用过这个SO来使我的自定义对象与Distinct一起工作。

Creating a distinct list of custom type in C#