0

最初のドロップ ダウン リスト (国を含む) で選択された内容に応じて、2 番目のドロップ ダウン リスト (郡を含む) を作成しようとしています。

GetCounties というコントローラー アクションがあります。

  public JsonResult GetCounties(string id)
    {
        DBEntities dc = new DBEntities();
        JsonResult result = new JsonResult();
        var filteredDivisions = from div in dc.Divisions
                                where div.CountryID == 1 //id
                                select div;
        result.Data = filteredDivisions.ToList();        
        return Json(result.Data, JsonRequestBehavior.AllowGet);          

        //         return Json(new[] {
        //    new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
        //    new { Id = 2, Value = "value 2" },
        //    new { Id = 3, Value = "value 3" },
        //}, JsonRequestBehavior.AllowGet);
    }

コメントアウトされているセクションに注意してください。それは私にとってはうまくいきます(部門リストから最初の値を取得し、他の2つは「値2」と「値3」と呼ばれます。コールバックをテストするためにそれを使用しましたが、それが私に与えた唯一のものでした使用する:

 return Json(result.Data, JsonRequestBehavior.AllowGet);     

ビュー側では何も達成しません。デバッグ時には、適切な値がすべて表示されますが、ビュー側のドロップダウン リストには表示されません。私が言ったように、私が得る唯一の結果は、コメントアウトされたコードを使用することです (ハードコードされた値、もちろん十分ではありません)。配列にデータを入力するために for ループを使用してリストを反復処理しようとしましたが、何も機能しません。匿名型が読み取り専用であるなどのエラーが発生するため、再度設定することはできません。

これは私のjqueryコードです:

  $(function () {
            $.getJSON('/Entity/GetCounties', function (result) {
                var ddl = $('#DivisionsList');
                ddl.empty();
                $(result).each(function () {
                    $(document.createElement('option'))
            .attr('value', this.Id)
            .text(this.Value)
            .appendTo(ddl);
                });
            });
        });

Divisionslist はもちろん、すべての郡のドロップダウンであり、上記のコメントなしの return ステートメントを使用すると、変更されずに返されます。つまり、選択した国に応じて表示される値だけでなく、すべての値が含まれます。JSONを使用してビューに返すことができるように、フィルター処理された結果を配列に入力するにはどうすればよいですか? 私が投稿したこのコードを使用したいのは、これまでに機能した唯一のものだったからです。ハードコードされた値を正しい値と交換するだけです。それが私が困っているところです。

私を助けてください。

4

2 に答える 2

0
$.getJSON('/Entity/GetCounties', {id: $('#yourCountrySelect').val()},function (result) {

そして今、私はあなたのテキストの壁を読みます^^

于 2011-08-17T17:15:42.563 に答える
0

私はそれを自分で解決しました。私がしたことはこれです:

   public JsonResult GetDivisions(int id)
    {
        ASNEntities dc = new ASNEntities();
        JsonResult result = new JsonResult();
        var filteredDivisions = from div in dc.Divisions
                                where div.CountryID == id
                                select div;

        List<object> listToReturn = new List<object>();

        for (int i = 0; i < filteredDivisions.Count(); i++)
        {
            Object[] obj = new[]{
             new { Id = filteredDivisions.ToArray()[i].DivisionID, Value = filteredDivisions.ToArray()[i].DivisionName },
        };

           listToReturn.Add(obj[0]);              
        }

        return Json(listToReturn.ToArray(), JsonRequestBehavior.AllowGet);

        //return Json(new[] {
        //    new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
        //    new { Id = 2, Value = "value 2" },
        //    new { Id = 3, Value = "value 3" },
        //}, JsonRequestBehavior.AllowGet);

    }

そしてそれはうまく機能します。

于 2011-08-18T16:05:13.197 に答える