2011-05-05 71 views
1

我在構建我的第一個MVC應用程序後遵循音樂商店教程,並嘗試在強類型視圖之間傳遞數據時遇到了一些問題。如何在MVC 3.0中的視圖之間傳遞數據列表?

我有兩個數據類型與自己的強類型的意見

客戶 客戶網站

在客戶網站的索引視圖(返回客戶站點的雙牀)我需要顯示下一個客戶名稱到每個站點地址,該視圖是強類型的客戶網站,但客戶名稱存儲在客戶表中,因此它不會允許我從模型中訪問此directlty?

我知道,一個選擇是使用viewbag,我已經成功地做到了這一點,以在下拉列表中使用下面的代碼

客戶站點控制器我創建視圖中顯示客戶名稱///// ////

public ActionResult Create() 
    { 
     ViewBag.Id = new SelectList(db.Customers, "Id", "CustomerName"); 
     return View(); 
    } 

索引視圖//////////

@Html.DropDownListFor(model => model.CustomerId, (IEnumerable<SelectListItem>)ViewBag.Id) 

這工作得很好,但現在我需要將客戶名稱要插入每個錶行,而不是降下拉列表。任何人都可以提供任何關於如何檢索要在客戶網站的索引視圖中的表格中呈現的客戶名稱的指針?

也是viewbag視圖之間傳遞數據的最佳方式還是有其他的替代方法嗎?有沒有辦法用多種數據類型強制輸入視圖?

任何人可以提供的建議將是偉大的。

親切的問候

利亞姆

+0

聽起來像是問題在於您需要結合來自兩個類(Customer和CustomerSite)的信息。它是否正確? – Yuck 2011-05-05 12:55:31

+1

您可以創建一個ViewModel類,將所有必要的信息合併到一個類中。這將有助於保持模型的純粹性,而不會限制視圖的功能。 – tomasmcguinness 2011-05-05 12:58:32

+0

@tomas - 是的,請參閱下面的答案,其中顯示確切的主體。事實上,在我的設計中,即使視圖只需要一個域實體,我總是先將它包裝在一個ViewModel中,以便稍後我需要傳遞其他信息。這是前面多一點努力,但推動分離的想法多一點。=) – Yuck 2011-05-05 13:00:27

回答

1

在回答你的問題的這一部分:觀點或之間

也就是viewbag的最好辦法 通數據是否有 其他替代方法?是否有 強制輸入多個數據類型的視圖? 多種數據類型?

答案是肯定的。創建一個新的類,像這樣:

public class SomeViewModel { 
    public Customer SomeCustomer { get; set; } 

    public CustomerSite SomeCustomerSite { get; set; } 
} 

傳遞到您的看法,這將有再通過模型訪問這兩個數據類型。

+0

@Yuck嗨感謝您的快速回復,我已經做到了這一點,但現在在視圖中得到錯誤,說新視圖模型不包含我的領域的定義。例如,@ Html.DisplayFor(modelItem => item.UnitNo)給出了一個錯誤,someViewModel不包含unit no的定義。 – 2011-05-05 13:10:11

+0

我還沒有和Razor一起工作過,所以你的@語法讓我感到有點不舒服。一切都會嵌套在另一層。將您的'foreach'循環更改爲Model.Customers或Model.CustomerSites - 無論您如何命名您的列表。智能感知應該幫助你解決這個問題。 – Yuck 2011-05-05 13:14:05

+0

@Yuck,再次感謝,但由於某種原因,我不能編寫Model.CustomerSites時,鍵入模型。我的類型都沒有列出,認爲它可能有一些與視圖聲明是IEnumerable,@model IEnumerable ,任何想法? – 2011-05-05 13:25:52

相關問題