我有两个实体:Person
和Quote
(一对多关系)
人:
public class Person
{
public int PersonID { get; set; }
[Required]
[StringLength(20]
public string Name { get; set; }
[StringLength(30]
public string Relation { get; set; }
public byte[] Image { get; set; }
[StringLength(50)]
public string ImageMimeType { get; set; }
public virtual ICollection<Quote> Quotes { get; set; }
}
引用:
public class Quote
{
public int QuoteID { get; set; }
public int PersonID { get; set; }
[Required]
[StringLength(200)]
public string QuoteName { get; set; }
[StringLength(400)]
public string Context { get; set; }
public DateTime? Date { get; set; }
public virtual Person Person { get; set; }
}
我想制作一个ViewModel,以短格式显示引号 - 我只需要几个属性 - Person Name
,QuoteName
和Person Image
。我可以做一些随意的事情,就像他们在每个ASP.NET MVC教程中展示一样:
public class QuoteViewModel
{
public IEnumerable<Quote> Quotes { get; set; }
}
是否有更好的方法而不是使用Quote
类型创建IEnumerable并加载所有属性?
如何创建QuoteShort
模型并将QuoteViewModel
设为IEnumerable<QuoteShort> QuotesShort
。
在控制器中,我会将每个3个字段从存储库映射到QuoteShort
并将其添加到QuotesShort
IEnumerable(即使我不知道如何将它们保存到QuotesShort
IEnumerable)< / p>
一些例子表示赞赏。
答案 0 :(得分:2)
您可以使用所需的少数属性创建QuoteShort
ViewModel,然后让您的视图期望IEnumerable<QuoteShort>
作为其模型。您不必将其包装在另一个容器中。
如果你有这个:
public class QuoteShort{
public Person Person {get;set;}
public string Name {get; set;}
// etc
}
您可以在控制器中执行此操作:
var quotes = //however you get your list of quotes
var model = (from q in quotes select new QuoteShort
{ Person = q.Person, Name = q.Name /*etc*/ }).ToList();
return View(model);
答案 1 :(得分:2)
像
这样的东西public class QuotesShortViewModel
{
public IEnumerable<QuoteShortViewModel> QuotesShort { get; set; }
}
public class QuoteShortViewModel
{
// ... the properties you need
}
创建一个接收QuotesShortViewModel的View
并遍历列表,根据需要呈现简短的引号。
AutoMapper
可用于在控制器中的模型和ViewModel之间进行映射。