3

私のMVCアプリケーションでは、ビューにhtml.dropdownlistがあります。選択が変更されたとき-コントローラーのメソッド(リストやJsonResultなどを返す)に値を渡したい。

Q1:どうすればよいですか?

 <%=Html.DropDownList("title", Model.Titleitems, "" )%>

Q2:これは良い習慣ですか(ビューにコントローラー/メソッド名を直接含める)、またはJavaScript関数を記述し、そのJavaScript関数内から適切なコントローラー/メソッドを呼び出す必要がありますか?その場合、上記のhtml.dropdownlistコントロールのOnchangeまたはOnSelectionChangedイベントをどのように記述できますか?

編集:

par1は、このコントローラー/メソッドに渡したいドロップダウンリストで選択された値です。

       public ActionResult GetMethod(string Par1)
        {
            //My code here 

            return Json(varValue, JsonRequestBehavior.AllowGet); 
        }

これで、変更に関するドロップダウンリストがJavaScript関数に移動し(marteljnの提案に従って)、JavaScript関数に、コントローラー/メソッドコードに移動するURLやタイプなどを指定する.ajax呼び出しがあります。しかし、それでも選択した値をコントローラーに渡す方法を理解できませんか?

4

2 に答える 2

7

Q2はQ1の答えです。WebフォームのようにMVCを使用する場合、イベントは発生しないため、JavaScriptを記述して、サーバーにリクエストを返します。
それについては(少なくとも)2つの方法があります。

  1. インラインイベントハンドラー(非推奨)

    <%=Html.DropDownList("title", Model.Titleitems, new{@onchange = "YourJsFuncHere()"} )%>

  2. JQueryの方法、

    $("#title").bind("change",function(){
         //Your Code  
         //Use .on instead of bind if you are using JQuery 1.7.x or higher   
         //http://api.jquery.com/on/ 
    });
    

編集-AJAXコード

$.ajax({
  "url": "/Controller/Action/" + $("#title").val(),
  "type": "get",
  "dataType" : "json",
  "success": function(data){
    //Your code here
    //data should be your json result
  }
});

パラメータを反映するようにデフォルトルートを変更または変更しGetMethod(string Par1)ます。GetMethod(string id)Par1

また、ブレークポイントに達していない場合は、1)AJAXリクエストが開始されていない可能性があります(firebugを使用して開始されているかどうかを確認してください)2)ルートが適切に構成されていません(ルーティングを別の場所に移動しませんでした。

于 2012-05-16T17:31:41.037 に答える
2
$(function(){
  $("#title").change(function(){
   var selectedVal=$(this).val();
   $.getJSON("UserController/YourAction",{ id: selectedVal} , function(result ){
       //Now you can access the jSon data here in the result variable
   });

 });

});

JSONを返すActionメソッドがで呼び出さYourActionれていると仮定しますUserController

public ActionResult YourAction(int id)
{
  //TO DO : get data from wherever you want. 

   var result=new { Success="True", Message="Some Info"};
   return Json(result, JsonRequestBehavior.AllowGet); 

}
于 2012-05-16T18:03:42.603 に答える