2017-04-03 14 views
-2

WebformsからASP.NET MVCに移行しています。ASP.NET MVCで膨大な数のドロップダウンを処理する方法

メインページには最大130個のドロップダウンリストがあり、リストには5〜50個の値があります。

ウェブフォーム/コードの背後でこれは簡単な問題です。しかし、MVCでは、コードの背後にサーバーコントロールがないので、これを処理する唯一の方法は、フィールド名にインデックスされた巨大なjson文字列を渡し、次にjQueryを使って解析することです。

アドバイスはありますか?

+0

MVCはUIをコードの背後から切り離すので、コードはありません。必要に応じて、ビューにドロップダウンをいくつでもドロップすることができます。コントローラとビジネスサービスを使用して、バインドする各ドロップダウンが必要な "SelectListItems"リストのそれぞれのモデルのプロパティを設定してください。 – Wheels73

+0

Webフォームでは、MVCでより多くのデータを渡していましたが、これはもっとシンプルでクリーンです。http://stackoverflow.com/questions/14654873/asp-net-mvc-4-viewmodel-with-dropdownlist-dataを参照してください。 – Anil

答えて

0

あなたはただ、展開するhere

0

のドロップダウンのためのより多くのチュートリアルを見ることができるビュー

@Html.DropDownList("ItemDropdown1", Model.ListOfItems, "Select Item...") 

にコントローラに表示

public ActionResult Index(string val, bool? inStock) 
    { 
     var viewModel = new ItemSearchViewModel(); 
     viewModel.ListOfItems = new SelectList(_service.GetListOfItem(), "ItemID", "ItemName"); //field to use ItemID as value ItemName as text 
     return View(viewModel); 
    } 

をHTMLヘルパーを追加することができます@fedriによる回答のビット.....

あなたは非常に多くのドロップダウンを持っているので、私はあなたがドロップダウンを整理するためにviewmodelクラスを使うことを強く勧めます。 (私はあなたがなぜそれほど多くのドロップダウンを持っているのかはわかりませんが、過剰な量のように見えますが、デザインには理由があると思います)。第1に、ビューモデルは単にclassである。

public class IndexViewModel 
{ 
    public List<SelectListItem> Dropdown1 { get; set; } 

    public string Dropdown1SelectedItem { get; set; } 
} 

私はビューにそのインスタンスを渡すことによって、こののviewmodelを使用しています。

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var viewModel = new IndexViewModel(); 

     viewModel.Dropdown1 = new List<SelectListItem>(); 

     viewModel.Dropdown1.Add(new SelectListItem() { Text = "Item 1", Value = "23" }); 

     return View(viewModel); 
    } 
} 


@model WebApplication3.Controllers.IndexViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.DropDownList(nameof(Model.Dropdown1SelectedItem), Model.Dropdown1, "Select item...") 
    <input type="submit" value="Save" /> 
} 

Iデータをポストバック場合、Dropdown1の選択された値をDropdown1SelectedItemに格納されています。

[HttpPost] 
public ActionResult Index(IndexViewModel viewModel) 
{ 
    //viewModel.Dropdown1SelectedItem will contain the Value property of the item you selected. 

    return View(); 
} 

これは、起動して実行するのに十分簡単です。あなたが迷子になってしまった場合に備えて、あなたのビューモデルを整理して、非常に多くのドロップダウンを用意しています。しかし、ドロップダウンプロパティに十分な名前をつけると、それほど悪くはないはずです。

EDIT:

あなたがポストバックからというし、バックAJAX/jQueryの経由ドロップダウンデータを渡す必要がある場合は、私はデータが動作する渡すJSON構造を使用していないかを確認することはできません。その場合、設計を見て、1回のヒットでデータをポストバックするには100回以上のドロップダウンが合理的であるかどうかを検討します。

関連する問題