這個問題類似於此鏈接: 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