我正在返回一些存储的联系人以查看DropDownList,我无法在我的SelectList中包含多个dataTextField。
目前我有:
@Html.DropDownListFor(model => model.Account.AccountContacts,
new SelectList(ViewBag.DDContacts, "Contact.ContactID", "Contact.FirstName"),
new { @class = "select", style = "width: 100px;" })
我想:
@Html.DropDownListFor(model => model.Account.AccountContacts,
new SelectList(ViewBag.DDContacts, "Contact.ContactID", "Contact.FullName"),
new { @class = "select", style = "width: 100px;" })
结合了FirstName和LastName属性。
更新:我知道扩展联系人属性,我很好奇是否有一种在View或Controller中完成此操作的简化方法。我尝试了两个解决方案here无济于事。 How can I combine two fields in a SelectList text description?
答案 0 :(得分:24)
延长联系
public partial class Contact
{
private string _nameFull;
public string NameFull
{
get{return FirstName + " " + LastName;}
}
}
答案 1 :(得分:10)
我意识到这个问题有一个经过批准的答案,但我不相信这是提问者所要求的。我遇到了这个问题,这就是我解决它的方法:
@Html.DropDownListFor(model => model.Account.AccountContacts,
new SelectList((from c in ViewBag.DDContacts.ToList() select new {
ID_Value = c.Contact.ContactID,
FullName = c.Contact.FirstName + " " + c.Contact.LastName
}), "ID_Value", "FullName"),
new { @class = "select", style = "width: 100px;" })
这是如何运作的: 我们使用linq从列表中选择特定数据并将其放入我们的新对象中。这个新对象只包含两个属性,'ID_Value'和'FullName'。 现在我们的DropDownListFor可以使用这个新对象来实现我们想要的输出。
答案 2 :(得分:2)
我做过这样的事情:
控制器:
ViewBag.Regiones = from p in modeloDB.Regiones.ToList() select new {
Id = p.Id,
Nombre = p.Codigo + " - " + p.Nombre
};
在视图中,我这样做了:
@Html.DropDownListFor(model => model.Region,
new SelectList(@ViewBag.Regiones, "Id", "Nombre"),
new { @class = "comboBox" })
@Html.ValidationMessageFor(model => model.Region)
它对我来说很完美!我希望它仍有帮助!
答案 3 :(得分:1)
转到您的模型并使用相同的实体名称创建一个新的Contact类。声明命名空间时要小心 这里有一些有用的代码(我希望):
public partial class Contact
{
[DataMember]
public string FullName{ get;set;}
}
在您的控制器中,只需执行以下操作:
data.FullName =data.Firstname+" "+data.LastName;
应该这样做。
答案 4 :(得分:1)
将属性添加到返回Contact
的{{1}}类中,但要考虑空名,空名或空格的名字或姓:
FullName
答案 5 :(得分:1)
我将如何做到这一点。只需修改代码以适合您的方案。我正在更改我的代码仅用于演示目的。
在我看来,我会有以下内容:
@model MyProject.ViewModels.MyViewModel
<table>
<tr>
<td><b>Bank:</b></td>
<td>
@Html.DropDownListFor(
x => x.BankId,
new SelectList(Model.Banks, "Id", "IdAndName", Model.BankId),
"-- Select --"
)
@Html.ValidationMessageFor(x => x.BankId)
</td>
<tr>
</table>
我的观点模型:
public class MyViewModel
{
public int BankId { get; set; }
public IEnumerable<Bank> Banks { get; set; }
}
我的银行班:
public class Bank : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
// This property will bring back the concatenated value.
// If the Id is 1 and Name is My Bank,
// then the concatenated result would be 1: My Bank
public string IdAndName
{
get
{
return (Id.ToString() + ": " + Name);
}
}
}
在我的控制器操作中:
public ActionResult MyActionMethod()
{
MyViewModel viewModel = new MyViewModel
{
Banks = bankService.GetAll() // Database call to get all the banks
};
return View(viewModel);
}
我希望这会有所帮助。
答案 6 :(得分:0)
向名为FullName的Contact类添加一个属性,该类只返回FirstName +“”+ LastName。
答案 7 :(得分:0)
您可以从DB获取您的联系人...并且使用LINQ您可以查询第一个集合,返回另一个带有ID和FULLNAME的集合...然后使用此集合填充您的下拉列表。
多数民众赞成只是为了帮助您的好奇心...我认为最好的方法是扩展您的Contact ViewModel以简化。