2011-12-09 20 views
0

私はASP.NET MVCをかなり新しくしており、次の問題のヘルプを探しています。再利用可能なDropDownListの内容

私はビュー内にDropDownListコントロールを持っています。選択した値は、私のモデルの整数フィールドに格納されます。

私の好みは、マークアップでテキストと値をハードコードしないことです。さらに、私は他のビューのDropDownListコントロールで同じテキストと値のリストを使用できるようにしたいと思います。

これらの値をどこかで初期化するクラスを作成する必要があるかどうかわからない、あるいは拡張メソッドが必要なのかもしれません。私はこのアプローチに最善の方法でいくつかのガイダンスを使用することができます。

+0

あなたのニーズに合わせて部分的なビューを使用しますか? – chardymcdennis

+0

@chardymcdennis:そうは思わないでしょう。 –

答えて

2

これはサンプルです:

var apps = _webAppRepo.GetAll(); 

IList<SelectListItem> appSelectListItems = new List<SelectListItem>(); 

foreach (var item in apps) { 

    appSelectListItems.Add(new SelectListItem { 
     Text = item.ApplicationName, 
     Value = item.WebApplicationID.ToString() 
    }); 
} 

ViewBag.AppSelectListItems = appSelectListItems; 

そして、これはあなたにそれを使用する方法であるビュー:

@Html.DropDownListFor(model => 
     model.WebApplicationID, 
     (IEnumerable<SelectListItem>)ViewBag.AppSelectListItems 
) 

あなたはモデルなしでそれを使用したい場合、これは方法です:

@Html.DropDownList("Foo", 
     (IEnumerable<SelectListItem>)ViewBag.AppSelectListItems 
) 
1

これを行うにはいくつかの方法がありますが、これらの値をビューモデルに保存してp年齢。私はここでは例としてTupleを使用しています:

public class MyViewModel 
{ 
    List<Tuple<int, string>> items_ = new List<Tuple<int, string>>(); 

    public MyViewModel() 
    { 
     items_.Add(new Tuple<int, string>(1, "Item1")); 
     items_.Add(new Tuple<int, string>(2, "Item2")); 
     // etc 
    } 

    public List<Tuple<int, string>> Items { get { return items_; } } 
} 

あなたのコントローラ:

public class MyController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 
} 

あなたのビュー:明らか

@model MyNameSpace.MyViewModel 


<select id="mySelect" name="mySelect> 
    @{foreach(Tuple<int, string> item in Model.Items){ 
     <option value="@item.Item1">@item.Item2</option> 
    }} 
</select> 

、あなたも作成するために、拡張子メソッドを作ることができますコンボボックスをもっと興味深い方法で追加してください:)

+1

Woww、あなたはアメリカをもう一度探検しました。組み込みのHtmlヘルパーの1つを使用してみませんか? – tugberk

+0

@tugberkの主な目的は、コンボボックスのアイテムをビューモデルに表示することでした。 –

+0

それも真実であり、あなたのアプローチはまったく合法ですが、それでも私には正しいとは思われません。 MVCチームはその目的のためだけにクラスを作成しました: 'SelectListItem' – tugberk

0

あなたのDropDownListをデータベーステーブル、またはxmlファイルから読み取ったメモリから取得します。

同じデータを使用して、他のddlにビューを移入できるはずです。

関連する問題