这个问题类似于此链接: ViewModel to display partial informationMVC视图模型显示只有模型数据
不过,我希望一个例子。我创建了我的模型,它看起来像这样:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace GuestListTemplate.Models
{
public class Guest
{
public int ID { get; set; }
[Required]
[Display(Name = "First Name:")]
public string FirstName { get; set; }
[Display(Name = "Last Name:")]
public string LastName { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "e-Mail:")]
public string eMail { get; set; }
[DataType(DataType.PhoneNumber)]
[Display(Name = "Phone #:")]
public string phone { get; set; }
public Boolean OptIn { get; set; }
[Display(Name = "Guest Last Name:")]
public string GuestLastName { get; set; }
[Display(Name = "Guest First Name:")]
public string GuestFirstName { get; set; }
[DataType(DataType.Currency)]
public decimal Donation { get; set; }
public int? Attended { get; set; }
}
}
所有这些信息对某些视图来说都不是必须的。我想让一个视图模型只显示名字,姓氏,捐赠,并且可能加入名字和姓氏。我试图做这样的事情,但它不工作:
namespace GuestListTemplate.ModelViewModels
{
public class GuestViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public decimal Donation {get; set;}
[Display(Name = "Full Name")]
public string FullName
{
get { return FirstName + " " + LastName;}
}
}
}
我如何告诉MVC使用Guest模型数据的视图模型这个源,或者我怎么绑定在一起? (这样做的目的是我认为这可能有助于我的应用程序的性能,它是否会帮助性能?)。我知道如何使用Viewmodels来显示多个表中的数据并提取所有数据,但在这种情况下,我只想从一个表中提取某些数据。最后,这在控制器中更好地完成了吗?
我希望这个问题有道理。它会更好使用LINQ查询诸如
var Guests = db.Guest.Include(g => g.firstname, g.lastname, g.donation);
return (Guests.ToList());
(我的理解上面的命令可能不是确切的语法bbut你的想法)。如果这是一个更好的方法,那么有人可以用整个视图模型代码演示一个基本的方法。我对LINQ相当不错,所以如果有人提供了一个基本的例子,我应该能够使它适用于我的目的。
编辑:
这为我工作(以及在下面的答案列出的接口):
视图模型是与上面相同。
以下是我在控制器里做:
var viewmodel = db.Guests.Select(g => new GuestListIndexData
{
ID = g.ID,
FirstName = g.FirstName,
LastName = g.LastName,
Donation = g.Donation,
Attended = g.Attended
}).OrderBy(g => g.FirstName);
return View(viewmodel.ToList());
我的看法是基本相同,就是我上面也列出。这可以起作用,但我不确定实际上我得到的性能有多快,所以我可能不会在使用非常大的数据库之前使用它。
我之前没有使用过Interfaces。去尝试一下,看看它是否有效,它仍然可以使用Visual Studio的自动创建Scaffolded视图的能力吗?我会在几分钟内发现 – dave317
对自动处理脚手架视图不起作用 – dave317
忽略我最后的评论。无论我需要自定义视图,我都可以使用界面或视图模型。我希望做到这一点,所以我不必定制视图太多,但这是不可能的。 – dave317