2011-10-07 71 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")%> 

这可不好措辞,所以我想我可以澄清,如果需要的话