2016-09-08 21 views
0

私はMVCアプリケーションで遊んでいて、まっすぐに思えるものを見つけようとしています。コントローラーにドロップダウン選択値を渡す

私はまた、「ST」の値とルックスを取る必要が検索コントローラを持っている(下記)非常に単純です、私のViews/Home/フォルダ

Indexビュー

... 
    <div> 
     Search 
     @Html.DropDownList("selection", MyProject.Util.Lists.GetMyList(), "Select One") 
     @Html.ActionLink("Search", "Index", "Search", new { st = xxx }, null) 
    </div> 
... 

Index.cshtmlファイルを持っています私が今まで値をドロップダウンから選択し、私のにそれを追加しているものグラブですかどのようにわからないんだけど何この

public class SearchController : Controller 
{ 
    // GET: Search 
    public ActionResult Index(string st) 
    { 
     ApplicationDbContext db = new ApplicationDbContext(); 

     List<Report> filteredReports = db.Reports.Where(r => r.Tag == st).ToList(); 

     return View(filteredReports); 
    } 
} 

のようなここで私はちょうど 'xxx'を持っています。

答えて

0

リンクをクリックすると、リンクのhref属性値への新しいGETリクエストが行われます。フォームからデータを送信することはありません。

リンク上でclickイベントをjavascriptでハイジャックし、SELECT要素の選択したオプション値をクエリ文字列として追加して送信する必要があります。

ですから、別のオプションクリックイベントに

とJavaScript

$(function(){ 

    $("#search").click(function(e){ 
    e.preventDefault(); 
    window.location.href=$(this).attr("href")+"?st="+$("#selection").val(); 
    }); 

}); 

をwireupするために後で使用できるリンクにIDを与えるには、提出フォームを使用することです。選択した要素をフォーム内にラップし、フォームをアクションメソッドに送信するsubmtボタンがあります。このメソッドはjavascriptを必要としません。しかし、あなたの選択入力エレメント名は、パラメータ名と一致する必要があります。あなたがボタンを持っていることを好むが、リンク要素を必要としない場合

@using(Html.BeginForm("Index","Search",FormMethod.Get)) 
{ 
    <div> 
    Search 
    @Html.DropDownList("st", MyProject.Util.Lists.GetMyList(), "Select One") 
    <input type="submit" value="Search" /> 
    </div> 
} 

、あなたは(私たちは最初のアプローチに行ったよう)フォームを送信するためにJavaScriptを使用することができます。この方法では、クエリ文字列を手動で追加する必要はありません。

0

あなたは、選択された値を格納しているコントローラにAJAX POSTコールを呼び出さなければなりません。

AJAX:

$.ajax(
{ 
    url:your url, 
    data:{"st":dropdown selected value}, 
    type:"post" 
}); 

コントローラー:

public ActionResult Index() 
{ 
    string st=TempData["st"].ToString(); 
    ApplicationDbContext db = new ApplicationDbContext(); 

    List<Report> filteredReports = db.Reports.Where(r => r.Tag == st).ToList(); 

    return View(filteredReports); 
} 

public void SetSt(string st) 
{ 
    TempData["st"] = st; 
} 
関連する問題