11

DropDownList を表示するために保存されている連絡先を返していますが、SelectList に複数の 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 プロパティの両方を組み合わせたものです。

更新:連絡先プロパティを拡張することを認識しています。ビューまたはコントローラーでこれを実現する合理的な方法があることに興味がありました。ここで2つのソリューションを試してみましたが、役に立ちませんでした。SelectList テキスト記述で 2 つのフィールドを組み合わせるにはどうすればよいですか?

4

8 に答える 8

24

連絡先を延長する

public partial class Contact
{
   private string _nameFull;
   public string NameFull
   { 
      get{return FirstName + " " + LastName;}
   }
}
于 2012-04-05T14:55:32.283 に答える
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

これが私がそれをした方法です。シナリオに合わせてコードを変更するだけです。デモ目的のためだけにコードを変更しています。

私の見解では、次のようになります。

@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 に答える
1

null、空、または空白の姓または名Contactを返すプロパティをクラスに追加します。FullName

[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

モデルに移動し、同じエンティティ名で新しい Contact クラスを作成します。名前空間を宣言するときは注意してください。
これが役立つコードです(願っています):

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

コントローラーで次のようにします。

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

それはそれを行う必要があります。

于 2012-04-05T15:01:06.870 に答える
0

FirstName + " " + LastName を返すだけの FullName という名前の Contact クラスにプロパティを追加します。

于 2012-04-05T14:47:36.483 に答える
0

DB から連絡先をそのまま取得できます...そして LINQ を使用すると、ID と FULLNAME を含む別のコレクションを返す最初のコレクションを照会できます...次に、このコレクションを使用してドロップダウンリストにデータを入力します。

それはあなたの好奇心を助けるためだけでした...簡単にするためにContact ViewModelを拡張するのが最善の方法だと思います。

于 2012-04-05T16:33:21.083 に答える