2016-10-22 8 views
-1

私は大量の情報を期待しているので、ユーザーがページで期待する結果を絞り込むためのいくつかのコントロールでいくつかのビューをカスタマイズしています。MVC 5ドロップダウンリスト

私のintellisenseはVS2015で壊れているので、私は少し暗闇の中でつまずいています。

だから、月と年の2つのドロップダウンリストが設定されています。きれいな、しかし、それは動作しません:ドロップダウンのいずれかが変更されたとき

@Html.DropDownList("Month", new List<SelectListItem> 
      { 
       new SelectListItem { Text = "January", Value = "1"}, 
       new SelectListItem { Text = "February", Value = "2"}, 
       new SelectListItem { Text = "March", Value = "3"}, 
       new SelectListItem { Text = "April", Value = "4"}, 
       new SelectListItem { Text = "May", Value = "5"}, 
       new SelectListItem { Text = "June", Value = "6"}, 
       new SelectListItem { Text = "July", Value = "7"}, 
       new SelectListItem { Text = "August", Value = "8"}, 
       new SelectListItem { Text = "September", Value = "9"}, 
       new SelectListItem { Text = "October", Value = "10"}, 
       new SelectListItem { Text = "November", Value = "11"}, 
       new SelectListItem { Text = "December", Value = "12"} 
      }, "Month") 
      @Html.DropDownList("Year", new List<SelectListItem> 
      { 
       new SelectListItem { Text = Convert.ToString(DateTime.Now.Year - 1), Value = Convert.ToString(DateTime.Now.Year - 1)}, 
       new SelectListItem { Text = Convert.ToString(DateTime.Now.Year), Value = Convert.ToString(DateTime.Now.Year), Selected = true}, 
       new SelectListItem { Text = Convert.ToString(DateTime.Now.Year + 1), Value = Convert.ToString(DateTime.Now.Year + 1)}, 
      }, "Year") 

さて、私はDDリストの内容で、このビューのために私のコントローラに両方のコントロールからドロップダウン選択を送りたいのですが。そこから私はページをリロードすることができます。 DropDownListの唯一のコンストラクタにはパラメータがないため、MSDNのドキュメントは不明です。イベント駆動型のものがどこにあるのか不明です。

+0

あなたが尋ねるものが不明 - フォームに含まれている場合は、選択した値がコントローラに送信されますが、DDリストの内容とは何ですか? (そして、いいえ、その_最も美しい - そのひどい - )。そして、あなたは何を意味するのでしょうか? –

+0

"といいえ、それは一番美しいものではありません - そのひどい" - それを擦ってくれてありがとう。私はそれが現時点でどれほど醜いのかよく分かっています。 –

答えて

0

このユースケースを処理する1つの方法は、SELECT要素をformの範囲内に保ち、select要素でchangeイベントが発生したときに送信することです。

@using (Html.BeginForm("Index","Home",FormMethod.Get)) 
{ 
    <!-- your existing code for SELECT elements goes here--> 
} 

これで、SELECT要素のchangeイベントを聞いて、最も近いフォームを送信できます。 Indexアクションメソッドを仮定

$(function() { 

    $("#Year,#Month").change(function() { 
     $(this).closest("form").submit(); 
    }); 

}); 

はparatmeters

public ActionResult Index(int? year,int? month) 
{ 
    // Check the year and month values, if not null, use them to filter your data 
    // to do : Return something 
} 
0

は、フォームタグ(ポストアクション)を持つ要素を包むように年月受け付けます。サーバーサイドでの

のような月と年のparamsたモデルを作成:この行

@using (Html.BeginForm("Index", "Home", FormMethod.POST, new { id = "MyForm" })) 
    { 
     @Html.DropDownList("Month", *your data*, "select month", new{ onchange = "document.getElementById('MyForm').submit();" }) 

     @Html.DropDownList("Year", *your data*, "select year", new{ onchange = "document.getElementById('MyForm').submit();" }) 

     <input type='submit' value='make the magic' /> 
    } 

あなたのドロップダウンの変更イベントをbindigさ:

public class MyModel{ 
    public string Month {get;set;} 
    public string Year {get;set;} 
} 

し、HTMLのようなものでなければならないが、 IDであなたのフォームを見つけて提出する。

new {onchange = "document.getElementById( 'MyForm')。submit();"

+0

Seversideにはすでにデータモデルがありますが、ビューに別のモデルを追加するにはどうすればよいですか? –

+0

jsを使用すると、フォームやいくつかのフォームを提出することができます... あなたは一意のIDを持つ別のフォームに任意の入力を置くことができ、入力の変更時に送信... – danigitman

関連する問題