2017-12-18 7 views
-1

検索用の単純なテキストボックスを持つ基本的なMVCインデックスビューがあり、正常に動作します。フィールドの1つから別の値を引き出すために、ドロップダウンリストフィルタも追加したかったのです。私はそれがこのような記事を使用して作業しました:ASP.NET MVCフィルタの値にドロップダウンにDistinct Valuesを選択します。

MVC - DropDown containing all distinct values for one field in database?

モデル内の別個の値を通じてあなただけのループ。問題は、一度値を選択してフォームを送信するときれいにフィルタリングされますが、ドロップダウンリストには1つの値(選択されている1つの値)しか含まれていないため、ビューがフィルタリングされるためです。

元の値を保持する簡単な方法がありますか、またはドロップダウンリストを作成するためにフィルタなしでモデルを再検索するようにビューにRazorを使用する簡単な方法はありますか?ここ

はビュー

@model IEnumerable<KPI_OnlineBilling_MVC.Models.OBProjectRequisition> 

@Html.DropDownList("region", new SelectList(Model.Select(i => i.MMRegion).Distinct().ToList()), new { onchange = "this.form.submit();" }) 

の一部だと、コントローラは、あなたの初期に行ったように全く同じように、基本的

public ActionResult Index(string searchString, string Regions) 
{ 
var requisitions = from s in db.OBProjectRequisitions select s; 
if (!String.IsNullOrEmpty(Regions)) 
{ 
requisitions = requisitions.Where(s => s.MMRegion.Contains(Regions)); 
} 

return View(requisitions.ToList()); 
} 
+0

コードの一部を投稿できますか?コントローラの部分とビューのように? – SamyCode

+0

コントローラーメソッドで 'SelectList'を生成する必要があります。これは、必要な値を含むデータベーステーブルから値を生成することによって行います。 –

答えて

0

あなたは、一般的モデル(またはViewDataを)を補充する必要がありますビューアクション。

0

基本的に、私がやったことは、私が「文字列領域」という方法が選択された値が文字列として伝わってくると私はできるか偶然にの確か1を作ったコントローラでビュー

@Html.DropDownList("Regions", "* ALL") 

でこれを追加しましたそれにフィルターをかける。

var regions = new SelectList(
db.ModelStuffs.Select(r => r.Region).Distinct().OrderBy(Region => Region).ToList(), Regions); 

ViewBag.Regions = regions; 

yea yea yea。私は人々がビューバックを使用して嫌いだと知っているが、データをビューに渡すのが最も簡単な方法でした。そうでなければ、ビュー自体に基づいてデータをフィルタリングすると、現在フィルタリングされた項目がドロップダウンに表示されます。

最後の "引数はリストの選択された値を設定するので、ビューにレンダリングされるときに自動的に最後に選択された値が選択されます。

ビューバックを使ってどのような問題が起こっているのかよく分かりません。 TempDataオブジェクトを使用するよりも優れています。これは、複数のタブ/ウィンドウで作業している場合に問題が発生するためです。重大でない内部アプリケーションの場合、これは正常に動作するようです。

関連する問題