2012-02-14 10 views
1

データベースの値にバインドする必要がある値のドロップダウンボックスを構築するためのベストプラクティスを作成しようとしています。Webフレームワークのドロップダウンボックスのベストプラクティス(ASP.NET MVC/ROR /何か本当に)

現在、私はこのリストからHow do you create a dropdownlist from an enum in ASP.NET MVC?

を第三の答えを使用しようとしています。しかし、私は列挙型に強く結合し、その後、項目の順序を変更したり、新しいアイテムを追加したい場合は、私は考えていました、列挙型の順序が実際にdbに格納されている値ではなく、ある種のバインディングレイヤーを持つ必要があることを確認する必要があります。

DBに関連するリストをドロップダウンリストで操作するための決定的な方法はありますか?

+0

side note - 特定の回答にリンクしたい場合は、そのリンクの下にある "link"ボタンをクリックしてください。 – RPM1984

答えて

0

一致する部分的なビューを持つリストに厳密に型指定されたビューモデルがあります。ビューモデルを塗りつぶしたコントローラでアクションを実行し、ビューに戻します。どこにドロップダウンを使用するかは、ビューにパーシャルビューを挿入します。

0

私は、このタスクのための拡張メソッドを使用してのファンです:

public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> value, Func<T, string> text, string defaultOption) 
{ 
    var items = enumerable.Select(f => new SelectListItem() 
              { 
               Text = text(f) , 
               Value = value(f) 
              }).ToList(); 

    if (!string.IsNullOrEmpty(defaultOption)) 
    { 
        items.Insert(0, new SelectListItem() 
         { 
          Text = defaultOption, 
          Value = "-1" 
         }); 
    } 

    return items; 
} 

あなたのコントローラの中で、あなたがドロップダウン内のアイテムとして表現するためにwan'tデータを選択します。私はDBからの都市を選択しています。この例では、注意してください:

SomeModel.City = 
     (from l in _locationRepository.GetAll() select new { l.Area.AreaDescription }) 
      .Distinct() 
      .ToSelectList(x => x.AreaDescription, x => x.AreaDescription, "All"); 

そしてダウンビュー内の実際のドロップ:

@Html.DropDownList("City", Model.City) 
1

は個人的に私は、私の見解モデルで列挙型を使用しないように。それらはASP.NET MVCでうまく動作しません。私は私のビューのいずれかのドロップダウンリストをレンダリングする必要があるのであれば、私は、対応するビューモデルに2つのプロパティを定義します。

@Html.DropDownListFor(x => x.SelectedValue, Model.Values) 
:データベースから、ビューで私のコントローラのアクションに移入され

public class MyViewModel 
{ 
    public string SelectedValue { get; set; } 
    public IEnumerable<SelectListItem> Values { get; set; } 
} 

+0

linqの構文で何かが間違っていたと思います。 –

+0

私はタイプミスを修正しようとしましたが、次のエラーがありました。編集は6文字以上でなければなりません。この投稿で改善すべき点は何ですか? – RickAndMSFT

+0

@ Rick.Anderson-at-Microsoft.com、私はtypoを修正しました。気づいてくれてありがとう。 –

関連する問題