11

我正在返回一些存储的联系人以查看 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 属性。

更新:我知道扩展联系人属性,我很好奇是否有一种简化的方法可以在视图或控制器中完成此操作。我在这里尝试了两种解决方案均无济于事。如何在 SelectList 文本描述中组合两个字段?

4

8 回答 8

24

扩大联系

public partial class Contact
{
   private string _nameFull;
   public string NameFull
   { 
      get{return FirstName + " " + LastName;}
   }
}
于 2012-04-05T14:55:32.283 回答
11

我意识到这个问题有一个认可的答案,尽管我不相信这是提问者想要的。我遇到了这个问题,这就是我解决它的方法:

@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 可以使用这个新对象来实现我们想要的输出。

于 2013-07-22T16:17:36.353 回答
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)

它非常适合我!我希望它仍然有帮助!

于 2014-07-07T02:35:12.403 回答
1

转到您的模型并创建一个具有相同实体名称的新联系人类。声明命名空间时要小心。
这里有一些代码会有所帮助(我希望):

public partial class Contact
{ 
   [DataMember]
   public string FullName{ get;set;}
}

在您的控制器中,只需执行以下操作:

data.FullName =data.Firstname+" "+data.LastName;

应该这样做。

于 2012-04-05T15:01:06.870 回答
1

Contact向您的类添加一个属性,该属性返回FullName但考虑到 null、空或空格的名字或姓氏:

[DataMember]
public string FullName
{
    return string.Join(
        " ",
        new string[] { this.FirstName, this.LastName }
            .Where(s => !string.IsNullOrWhiteSpace(s))));
}
于 2012-04-05T15:14:37.580 回答
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);
}

我希望这有帮助。

于 2012-04-05T15:41:17.300 回答
0

向您的联系人类添加一个名为 FullName 的属性,该属性仅返回 FirstName + " " + LastName。

于 2012-04-05T14:47:36.483 回答
0

您可以按原样从 DB 中获取联系人...并使用 LINQ 您可以查询第一个集合,返回另一个具有 ID 和 FULLNAME 的集合...然后使用此集合填充您的下拉列表。

那只是为了帮助你的好奇心......我认为最好的方法是为了简单起见扩展你的 Contact ViewModel。

于 2012-04-05T16:33:21.083 回答