2011-10-07 73 views
1

我不知道我是否錯過了一些顯而易見的東西,但我真的很想抓住與複合鍵關聯的客戶端名稱。用MVC3.net中的組合鍵記錄填充DropdownList?

控制器代碼:

Job job = db.Jobs.Find(id); 


      ViewBag.jobClientsList = new SelectList(job.JobClients.ToList(), "ClientNumber", "ClientNumber"); 

查看代碼:

<%: Html.DropDownList("ClientNumber", ViewData["JobClientsList"] as SelectList)%> 

型號:

namespace Sample.CustomerService.Domain { 
using System.ComponentModel.DataAnnotations; 

public class JobClient { 
    public JobClient() { } 
    [Key] 
    [Column(Order = 1)] 
    public virtual int JobNumber { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public virtual int ClientNumber { get; set; } 
    public virtual Client Client { get; set; } 
    public virtual Job Job { get; set; } 
} 

}

此代碼的工作,但我在下拉列表得到的是一堆數字。我真的很喜歡與數字相關的客戶名稱,但我真的不知道該怎麼做!我一直在四處尋找!

回答

0

重新閱讀你的問題你的答案似乎是簡單的,然後經過預期。 退房的選擇列表類http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist.aspx

構造您使用您的控制器是錯誤的,它應該是:

ViewBag.jobClientsList = new SelectList(job.JobClients.ToList(), "ClientNumber", "Client"); 

您進行設置選擇列表的文本值是「ClientNumber」,這是爲什麼你有一個數字列表,而不是名字!

+0

在閱讀您的答案之前,我已經意識到這一點。但是,這是完美的,謝謝! –

0

默認情況下,選擇列表顯示你被標記[關鍵]是他們的名字

<%: Html.DropDownList("ClientNumber", ViewData["JobClientsList"].Client as SelectList)%>

應打印客戶端名稱(假設客戶對象上的主鍵的屬性,否則你會需要像ViewData["JobClientsList"].Client.FullName

最好的解決辦法是使用,而不是使用ViewBag或ViewData的這一個視圖模型,這將有助於避免許多煩惱的現在和未來。

+0

謝謝。我試過了,但是它現在給我一個錯誤: –

+0

'object'沒有包含'Client'的定義,也沒有可以找到接受'object'類型的第一個參數的擴展方法 –

+0

我還沒有用過ViewData之前,贊成ViewBag代替。如果它說'對象'不包含定義,那麼您可能需要手動將其重新轉換回您的類(JobClient)ViewData [「JobClientsList」]。客戶端 – Valchris

0

什麼我也做過去 讓DropDownLists工作就是將List保存到會話變量中,然後在實際的DropDownList中創建我的SelectList。
控制器:

Job job = db.Jobs.Find(id).ToList(); 
ViewBag.jobClientList = job; 

查看:

<%: Html.DropDownList("ClientNumber", new SelectList((If you view is strongly typed, put that here) ViewData["JobClientsList"],"ClientNumber","ClientNumber")%> 

這可不好措辭,所以我想我可以澄清,如果需要的話