1

したがって、1つのドロップダウンリストを変更すると、2番目のリストにデータを入力しようとしています。

私はこのクライアント側の機能を持っています:

 $('#ProjectReference').change(function() {

       var url = "@Url.Action("GetProjectIterations", "Rally")";
       var data = { selectedProject: $('#ProjectReference').val() };


       $.getJSON(url, data, function(iterations) {
              alert("hello?");
              var items;
              $.each(iterations, function(i, iteration) {
                   items += "<option value='" + iteration.Name + "'>" + iteration.Name + "</option>";
              });
            }
       );

       $.ajax({
            url: url,
            type: 'GET',
            dataType: 'json',
            data: data,
            contentType: 'application/json; charset=utf-8',
            success: function (iterations) {
                        alert("hello?");
                        var items;
                        $.each(iterations, function(i, iteration) {
                            items += "<option value='" + iteration.Name + "'>" + iteration.Name + "</option>";
                        });

                        $("#ProjectIteration").html(items);},
             failure: function () { alert("nope");}
            });
        });

コントローラーを呼び出すために2つの異なる形式を試しました(したがって、両方が必要ないことはわかっています。試したことを強調するために両方を含めました)。

コントローラが呼び出され、データが返されますが、アラートは発生しません(更新しようとしているドロップダウンリストには何も起こりません)。では、データを返す方法が正しくないのではないでしょうか。私の選択リストの数は33であるため、返される前にデータが含まれているように見えます。

public ActionResult GetProjectIterations(string selectedProject)
{
     var projectIterations = cache.Get("ProjectIterations") as Hashtable;
     var iterations = (projectIterations[selectedProject] as ArrayList).Cast<DynamicJsonObject>().ToList();
     var selectList = iterations.Select(
            iteration => new SelectListItem {Text = iteration["Name"], Value = iteration["Name"]});
     return Json(selectList);
}
4

1 に答える 1

1

使用しているので、コントローラーのアクションをGET変更する必要があります。JsonRequestBehavior

あなたの例では、コードは次のようになります。

public ActionResult GetProjectIterations(string selectedProject)
{
     var projectIterations = cache.Get("ProjectIterations") as Hashtable;
     var iterations = (projectIterations[selectedProject] as ArrayList).Cast<DynamicJsonObject>().ToList();
     var selectList = iterations.Select(
            iteration => new SelectListItem {Text = iteration["Name"], Value = iteration["Name"]});
     return Json(selectList, JsonRequestBehavior.AllowGet); //check the overload for Json()
}
于 2013-02-04T15:40:22.390 に答える