我不知道我是否遗漏了一些明显的东西,但我真的想要获取与复合键相关的客户名称。
控制器代码:
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 :(得分:0)
默认情况下,选择列表会显示标记为[Key]
的属性&lt;%:Html.DropDownList(“ClientNumber”, ViewData [“JobClientsList”]。客户端为SelectList)%&gt;
应该打印客户端名称(假设客户端对象上的主键是他们的名字,否则你需要ViewData["JobClientsList"].Client.FullName
最好的解决方案是使用ViewModel而不是使用ViewBag或ViewData,这有助于避免现在和将来的许多麻烦。
答案 1 :(得分:0)
我过去为DropDownLists工作所做的是将List保存到Session变量,然后在实际的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")%>
这可能措辞不力,所以我想我可以澄清是否需要
答案 2 :(得分:0)
重新阅读您的问题后,您的答案似乎比预期的更简单。 查看选择列表类http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist.aspx
你在控制器中使用的构造函数是错误的,它应该是:
ViewBag.jobClientsList = new SelectList(job.JobClients.ToList(), "ClientNumber", "Client");
您正在将selectList的文本值设置为“ClientNumber”,这就是为什么您有一个数字列表而不是名称!
答案 3 :(得分:0)
任何寻求解决方案的人,请尝试以下操作:
在您的控制器中:
1)获取列表:
var allCountries = countryRepository.GetAllCountries();
2)定义一个变量:
var items = new List<SelectListItem>();
3)循环每个项目:
foreach(var country in allCountries)
{
items.Add(new SelectListItem() {
Text = coutry.Name,
Value = Country.Id.ToString(),
// Put all sorts of business logic in here
Selected = country.Id == 13 ? true : false
});
}
model.Countries =项目;
您认为:
@Html.ActionLink("StringToDisplay", "actionName", "controllerName", new SelectList(Model.Countries, "Value","Text"),"--Please Select--", new{@class="form-control"})
更不用说Model应该具有
的属性public IEnumerable<Country> Countries {get; set;}