2011-06-28 72 views
0

我是新來的MVC,企圖選擇包含兩個對象,返回一個強類型的視圖模型數據使用存儲庫模式,ASP.net MVC.2返回多個對象,以強類型的視圖模型

即時得到一個一直堅持最好的辦法是,

這兩個表是由一個客戶ID字段,我有一個存儲庫接口設置,並強制類型的視圖模型,包含屬性客戶和客戶網站對象,我需要的是顯示客戶網站列表以及客戶表中的相關客戶名稱。

在顯示模板我有以下

<%= Html.DisplayFor(x => x.Customers.CustomerName) %> 
<%= Html.DisplayFor(x => x.Customers.Site.AddressLine1) %> 

我有這顯示模板工作,但我的模型是空的。

當IM感到困惑是如何定義的接口和存儲庫,以及如何將數據返回到我的模型這個數據,只返回我的界面我的客戶我用這個列表

IQueryable<Customer> Customers { get; } 

然後一個簡單的LINQ選擇。

但是,由於該數據將包含客戶和客戶網站我不確定如何在界面中定義這個數據?

也將一個LINQ連接是一個合適的方法將此數據返回到我的viewmodel?像

var Customers = 

    from c in customers 

    join cs in customerSites on c equals cs.CustomerId into ps 

    from p in ps 

    select new { Customer = c, cs.CustomerName }; 

UPDATE =========

這是我使用的是stronly輸入到顯示模板視圖模型的代碼,

public class CustomerViewModel 
{ 
    public int Id { get; set; } 
    public string CustomerName { get; set; } 
    public string PrimaryContactName { get; set; } 
    public SiteViewModel Site { get; set; } 
} 

它如何在存儲庫/控制器中填充模型,使兩個對象都顯示在我正在努力的列表中。

回答

0

你可能已經做了SOEM以下步驟已經所以請忽略,如果你有..

1科瑞解決方案中的一個ViewModel文件夾。

2創建基礎視圖模型....可能是這樣的 - >

public class BaseViewModel 
    { 
     public PageProperties PageProperties { get; set; } 
     public User User { get; set; } 
    } 

3設置爲你的控制器動作視圖模型也許像這樣 - >

public class ProjectVM : BaseViewModel 
    { 
     public ProjectPoco project { get; set; } 

    } 

4在您的控制器中從您的存儲器中獲取數據並將其傳遞給vi的一個實例ew model like this - >

var contextVM = new ProjectVM();

 contextVM.project = ObjectExtensions.Convert<ProjectPoco>(tbl.Single(id)); 
     contextVM.PageProperties = new PageProperties 
             { 
              Heading = contextVM.project.Name, 
              SubHeading = "Details for" + 

contextVM.project。名稱 }; return View(contextVM);

5設置你的意見模型是您的視圖模型的 - >

@model NerveCentre.ViewModels.ProjectVM

6使用視圖模型可以拉出數據插入查看 - >

@ Model.project.Description

通過視圖模型將數據傳遞到視圖的快速和粗略描述。希望我沒有錯過任何東西。

至於數據..看看你是如何擁有該模型(Customers.Site.AddressLine1),它不僅可以將客戶從您的查詢傳遞到您的視圖模型?

所以您的視圖模型可能看起來像..

public class SomeViewModel: BaseViewModel 
    { 
     public List<Customer> Customers { get; set; } 

    } 

如果你讓我們知道您所使用的數據訪問,然後我們也許能夠幫助更多的與得到的細節數據超出你的表格和你想要的格式?

+0

@ dav1dMclean,感謝您的建議,我使用LINQ to sql進行數據訪問,我的數據存儲在SQL數據庫中。它的數據訪問部分im正在努力,我用我的viewmodel更新了這個問題。 – Liam

+0

ahh好的,(你可能想讓你的視圖模型從基地繼承..永遠不知道什麼時候你需要添加網站範圍內的東西..)。 –

+0

我沒有使用Linq到SQL,但除非我誤解了..你的查詢將帶回一個對象與你的表中的數據對嗎?因此Customers.CustomerName可能會提供客戶名稱?我不知道也許我是老帽子,但我會考慮一個存儲過程和一個正確結構的類。然後運行sp到列表中或鍵入你的新類。那麼只需根據需要使用該數據?我喜歡我的DA儘可能簡單快捷(因此我不使用Linq to SQL:p) - > –

相關問題