2017-07-06 81 views
0

我有一個場景,用戶將提交一個包含2個模型(數據庫表)信息的表單:用戶和請求。這些數據還需要一起列入用戶ID,即列出所有用戶或特定用戶所做的所有請求。所以我也需要輸出兩個表中的數據。ASP.NET MVC -ViewModel一次列出2個模型

我的解決方案是創建一個名爲UserRequests的ViewModel,它將包含這兩個模型,但是我堅持實現。我不知道這是否應該是這樣的:

public class UserRequestModel { 
    public User User1 { get; set; } 
    public Request Request1 { get; set; } 

總之,什麼在控制指數()函數將要做的,就是讓所有用戶查詢請求,並列出兩個表中的所有領域(接合)。所以我需要以某種方式將來自該查詢的數據輸入到ViewModel中以輸出它,並且不知道如何設置ViewModel以便這樣做。任何洞察力將不勝感激。謝謝!

+2

是的這是一個很好的解決方案......是什麼讓你覺得它不會是? – Milney

+0

這很好。那麼我的問題是,我如何將查詢數據輸入到ViewModel中以進行輸出? –

+0

那完全取決於你的數據訪問將如何完成......你使用ORM嗎?實體框架? LINQ?小巧玲瓏的? Plain SqlCommands?一旦你決定你可能會得到一個例子,但如何從數據庫中獲取數據是一個太廣泛的問題,在這裏回答....嘗試谷歌ASP MVC數據庫和閱讀教程或兩個... – Milney

回答

1

你可以使用LINQ加入兩個表,然後投射記錄到你的目標視圖模型,以便像:

var res = 
    from u in Users 
    join r in Requests on u.UserId equals r.UserId 
    select new UserRequestModel { User1 = u, Request1 = r}; 

您是否使用ORM(如實體框架)來映射數據庫表?

+0

我正在使用實體框架。這正是我一直在尋找和完美工作。非常感謝! –

+0

只需爲每個人添加最後一行:「return View(res);」 –

0

該ViewModel應該旨在幫助您顯示數據。我建議你遵循規則1 ViewModel per View。 您應該首先清楚地設計如何在視圖中表示數據。我不確定您的ViewModel是否正是您想要表達的內容。你想顯示1個請求和所有相關的用戶?或者你想要1個用戶和所有相關的請求?或者你想要很多與用戶有關的請求?

根據您的需要,您應該創建ViewModel。假設你想要1個用戶和許多請求,那麼我會在用戶類中有一個請求列表。

0

我能想到的唯一的事情就是你會得到的是一個用戶和一個請求,在你的帖子接縫中,你會得到不止一個。

我會改變屬性列表,IEnumerables或數組取決於你喜歡什麼,然後當你從數據庫中獲取帖子,做一個ToList(),ToArray()或類似的。

public class UserRequestModel { 
    public List<User> Users { get; set; } 
    public List<Request> Requests { get; set; } 
} 

並且當您使用您喜歡的擴展方法獲取數據時。

var Users = dbcontext.Users.Where(x => x.ex == example).ToList()