0

FireBug を使用すると、selectedPrdLctn の選択された値が正しく設定されていることがわかりますが、JSON を介してアクションに渡すと、null になります。

        $.getJSON('@Url.Action("GetCS")', { cntrParam: selectedPrdLctn }, function (getCS) {

私の行動

   public ActionResult GetCS(String[] cntrParam)

dropDownList を使用すると、コードが機能します。なぜ私がセレクションに合格しないのですか?

4

1 に答える 1

2

問題は、traditionalパラメータを設定しておらず、デフォルトのモデル バインダーが理解できる形式で jQuery がコレクションを送信しないことが原因であると思われます。jQuery 1.4 以降を使用している場合は、このパラメーターを設定する必要があります。

例えば:

モデル:

public class MyViewModel
{
    public string[] SelectedValues { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Items = new[] 
            {
                new SelectListItem { Value = "1", Text = "item 1" },
                new SelectListItem { Value = "2", Text = "item 2" },
                new SelectListItem { Value = "3", Text = "item 3" },
                new SelectListItem { Value = "4", Text = "item 4" },
            }
        };
        return View(model);
    }

    public ActionResult GetCS(string[] values)
    {
        return Json(new 
        { 
            message = string.Format("{0} item(s) selected", values.Length) 
        }, JsonRequestBehavior.AllowGet);
    }
}

意見:

@model MyViewModel

@Html.ListBoxFor(
    x => x.SelectedValues, 
    Model.Items, 
    new { 
        id = "mylist",
    }
)

@Html.ActionLink("Send AJAX", "getcs", null, new { id = "mylink" })

脚本:

$(function () {
    $('#mylink').click(function () {
        var selectedValues = $('#mylist').val();
        $.getJSON(this.href, $.param({ values: selectedValues }, true), function (result) {
            alert(result.message);
        });
        return false;
    });
});

この関数をどのように使用し$.param、従来のパラメーターを表す 2 番目の引数として true を渡すかに注意してください。trueandで呼び出してみるとfalse、FireBug の違いがわかり、このパラメーターを設定しないと機能しない理由がわかります。

このパラメータをすべての AJAX リクエストに対してグローバルに設定することもできます。

$.ajaxSetup({
    traditional: true
});

そして、以下が機能します:

$.getJSON(this.href, { values: selectedValues }, function (result) {
    alert(result.message);
});
于 2012-04-06T06:05:07.363 に答える