質問

別のドロップダウンで選択された値に基づいて、ドロップダウンを入力しようとしています。私は使っている この男は 例ですが、まだ正常に実行されていません。親のドロップダウンの変更イベントで起動されるAjaxコールが成功しました。 Ajax関数に渡されたデータが正しいことを確認しました。ただし、結果はエラー(200; JSON結果の予期しない文字)です。私は、a)ajaxコールで呼び出されるa)コントローラーアクションとb)結果のリストをコントローラーアクションにフィードする関数をデバッグする方法を把握しようとしてきました。誰かが私がデバッグする方法を理解するのを手伝ってくれますかa)とb)? Visual Studio 2010は、AJAXコールのターゲットをデバッグするための多くのヘルプを提供していません。

これが私が持っているコードです:

1)List Helperクラス関数を呼び出すコントローラーアクション(BreedController)は、JSONオブジェクトをAjaxの成功コールバックに戻すと思われます。

    //
    // Retrieve JSON object containing breeds for a given species
    //
    [HttpPost]
    public JsonResult BreedsBySpecies(int? id)
    {
        ListHelper lh = new ListHelper();
        return Json(new { items = lh.GetBreedsBySpecies(id) }, JsonRequestBehavior.AllowGet);
    }

2)種IDが与えられた品種のselectItemlistを返す必要がある関数。これは、コントローラーアクションによって呼び出されます。

    public List<SelectListItem> GetBreedsBySpecies(int? speciesID)
    {

        var breed = from b in db.Breeds
                    select b;

        if (speciesID.HasValue)
        {
            breed = breed.Where(b => b.SpeciesID == speciesID);
        }

        List<SelectListItem> lst = new List<SelectListItem>();
        foreach (var item in breed)
        {
            lst.Add(new SelectListItem { Text = item.Description, Value = item.BreedID.ToString() });
        }

        return lst;
    }

3)Ajax呼び出しを行うJavaScript関数。これが正しい値を取得していることを確認しました(例:「/breed/breedsbyspecies」を適切なコントローラーアクションに到達し、formdataに適切な種IDが含まれています)

function selectFromAjax(url, formData, target) {
    $(target).html("");
    if (formData.id) {
        $.ajax({
            type: 'POST',
            url: url,
            data: formData,
            dataType: 'text json',
            contentType: 'application/json; charset=utf-8',
            success: function (data, textStatus) {
                if (data) {
                    $(data.items).each(function () {
                        $(target).append($("<option></option>").attr("value", this.Value).text(this.Text));
                    });
                    $(target).change();
                }
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });
    }
    else {
        $(target).change();
    }
}
役に立ちましたか?

解決

それが遠くにあるならば、あなたはブレークポイントを押すべきです。私の推測では、JSON .NETを理解するには、オブジェクトをストリング化する必要があると思います。または、そのような単純なオブジェクトなので、次のようなことをします。

 data: "{'id': '" + formData.Id + "'}"

編集

IDを渡すだけなので、技術的にはURLを使用して必要な場所を取得し、データをまったく渡さないことができます。あなたはただこのようなことをするでしょう:

url: url + '/'+ formData.Id

これは、あなたのルートとJavaScriptをしっかりと結合しますが、それは理想的ではありませんが、それは仕事を終わらせます。また、データパラメーターにデータを渡す必要性が削除されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top