Как объединить два поля dataTextFields для описания SelectList в asp.net MVC 3 с использованием @Html.DropDownListFor
Я возвращаю некоторые сохраненные контакты для просмотра DropDownList, и я не могу включить несколько полей dataTextFields в свой список выбора.
В настоящее время у меня есть:
@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.
UPDATE: я знаю о расширении свойства контакта, мне было любопытно, есть ли упрощенный способ выполнить это в представлении или контроллере. Я попробовал два решения здесь безрезультатно. как объединить два поля в текстовом описании SelectList?
8 ответов
продлить контакт
public partial class Contact
{
private string _nameFull;
public string NameFull
{
get{return FirstName + " " + LastName;}
}
}
Я понимаю, что этот вопрос имеет одобренный ответ, хотя я не верю, что это то, что искал спрашивающий. Я пришел в этот вопрос и вот как я решил это:
@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 может работать с этим новым объектом для достижения желаемого результата.
Я сделал что-то вроде этого:
: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)
Он отлично работает для меня! Надеюсь, это все еще помогает!
перейдите к своей модели и создайте новый класс контактов с тем же именем сущности . Будьте осторожны при объявлении пространства имен.
Вот код, который поможет (надеюсь ) :
public partial class Contact
{
[DataMember]
public string FullName{ get;set;}
}
в вашем контроллере просто сделайте что-то вроде:
data.FullName =data.Firstname+" "+data.LastName;
Это должно сделать это .
добавить свойство в свой Contact
класс, который возвращает FullName
но учитывает null, пустые или пробелы имя или фамилия:
[DataMember]
public string FullName
{
return string.Join(
" ",
new string[] { this.FirstName, this.LastName }
.Where(s => !string.IsNullOrWhiteSpace(s))));
}
вот как бы я это сделал. Просто измените код в соответствии с вашим сценарием. Я меняю свой код только для демонстрационных целей.
на мой взгляд, у меня было бы следующее:
@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);
}
надеюсь, это поможет.
добавьте свойство к классу контактов с именем FullName, которое просто возвращает FirstName + "" + LastName.
вы можете получить свои контакты из БД, как они есть... и с помощью LINQ вы можете запросить первую коллекцию, возвращающую другую коллекцию с ID и FULLNAME... затем используйте эту коллекцию для заполнения раскрывающегося списка.
Это было просто, чтобы помочь ваше любопытство... Я думаю, что лучший способ-расширить вашу контактную ViewModel для простоты.