在視圖中呈現來自多個模型的信息的最簡單方法是什麼?我在某些場景中使用ViewModel(特別是當模型不直接相關時),但現在我想爲當前用戶製作一種儀表板。所以除了AspNetUsers模型外,我還有幾個模型(例如Orders,OperationJournal,Jobs等),它們在實體方面都有一個用戶ID上的外鍵。 我做了一個視圖模型,例如:視圖中多個模型的整潔簡單方法
namespace JobShop.Models
{
class QuickProfileVM
{
public IEnumerable<Jobs> Jobs { get; set; }
public IEnumerable<AspNetUsers> AspNetUsers { get; set; }
public IEnumerable<CreditJournal> CreditJournal { get; set; }
public IEnumerable<CandidateReview> CandidateReview { get; set; }
}
}
(因爲我需要的基本模型,由EF完成他們所有實體間的關係左右),但在我看來,這是不夠的。我無法同時查看當前用戶配置文件(如此一條記錄)和詳細信息(多條記錄和多個模型)。 我嘗試使用部分視圖,都使用自己的控制器或使用儀表板視圖控制器中的操作。 作爲一個例子一個ActionResult,現在我玩:
public ActionResult QuickProfile()
{
var QuickProfile = new QuickProfileVM();
var AspNetUsers = new AspNetUsers();
if (User.Identity.IsAuthenticated)
{
var CurrentUser = User.Identity.GetUserId();//UserManager.FindById(User.Identity.GetUserId());
var TheUser = db.AspNetUsers.Where(u => u.Id == CurrentUser)
.Select(u => new
{
ID = u.Id,
Email = u.Email,
PhoneNumber = u.PhoneNumber,
Companyname = u.Companyname,
Address = u.Address,
ZIP = u.ZIP,
City = u.City,
Country = u.Country,
Website = u.Website,
Facebook = u.Facebook,
Twitter = u.Twitter,
GooglePlus = u.GooglePlus,
Dribble = u.Dribble,
BirthDate = u.BirthDate,
Username = u.UserName,
Surrname = u.Surname,
Name = u.Name,
Role = u.Role,
ThumbURL = u.ThumbURL,
CreditBalance = u.CreditBalance
}).Single();
var TheJournal = db.CreditJournal.Where(tj => tj.UseBy == CurrentUser)
.Select(tj => new
{
IdJournal = tj.IdJournal,
Operation = tj.Operation,
CvID = tj.CvID,
JobID = tj.JobID,
CreditConsumed = tj.CreditConsumed,
UseDate = tj.UseDate,
UseBy = tj.UseBy
}).ToList();
//similar for Jobs and CandidateReview
//
var UserId = TheUser.ID;
var username = TheUser.Username;
var role = TheUser.Role;
var InitialCredit = TheUser.CreditBalance;
AspNetUsers.UserName = TheUser.Username;
AspNetUsers.Companyname = TheUser.Companyname;
AspNetUsers.Surname = TheUser.Surrname;
AspNetUsers.Name = TheUser.Name;
AspNetUsers.ThumbURL = TheUser.ThumbURL;
AspNetUsers.CreditBalance = InitialCredit;
//I put this to ilustrates what I have accesible for example
//about CreditJournal: only methods, not properties
QuickProfile.CreditJournal.AsEnumerable();
var id = CurrentUser;
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
AspNetUsers aspNetUsers = db.AspNetUsers.Find(id);
if (aspNetUsers == null)
{
return HttpNotFound();
}
}
return View(AspNetUsers);
//Disbled since at this stage is not usefull
//return View(QuickProfile);
//return View();
}
我不認爲問題是那麼清楚,但是在代碼註釋中提到您無法訪問'CreditJournal'屬性,這是因爲'QuickProfile.CreditJournal'引用了多條記錄(它是一個'IEnumerable')你需要在視圖中列舉它們以顯示每個信用日誌/子記錄的屬性 – Charleh
是的,我需要這個,但其中一個(很多錯誤)是CreditJournal(例如)不可枚舉。 – net4u