4

コントローラーメソッドへの ajax 呼び出しを行おうとしています。パラメータなしで正常に動作します。パラメーターを追加すると、コントローラーには常に null パラメーターが渡されます。私はajax呼び出しでパラメータを正しく渡したと思います。

 <script type="text/javascript">
        $(document).ready(function () {
            $('#lstStock').change(function () {
                var serviceURL = '<%= Url.Action("GetStockPrice", "Delivery") %>';
                var dropDownID = $('select[id="lstStock"] option:selected').val();
             alert(dropDownID); // here i get the correct selected ID
                $.ajax({
                    type: "POST",
                    url: serviceURL,
                    data: '{"stockID":"' + dropDownID + '"}',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: successFunc,
                    error: errorFunc
                });

                function successFunc(data, status) {

                    alert(data.Result);


                }

                function errorFunc() {
                    alert('error');
                }
            })
        });
    </script>

コントローラ:

 [HttpGet]
        public ActionResult GetStockPrice()
        {
            return View();
        }

        [HttpPost]
        [ActionName("GetStockPrice")]
        public ActionResult GetStockPrice1(string stockID)//I get the null parameter here
        {
            DeliveryRepository rep = new DeliveryRepository();
            var value = rep.GetStockPrice(stockID);
            return Json(new { Result = value }, JsonRequestBehavior.AllowGet);

        }
4

3 に答える 3

12

データを文字列として扱っているためです

data: '{"stockID":"' + dropDownID + '"}',

次のように変更できます。

data: { stockID: dropDownID },

場合によっては、コントローラー メソッドで宣言されたパラメーターによっては、データをシリアル化する必要があります。それを行う必要がある場合は、次のようにします。

var o = { argName: some_value };
$.ajax({
    // some other config goes here
    data: JSON.stringify(o),
});
于 2013-05-07T08:19:50.487 に答える
3

試すdata: { stockID : dropDownID},

$('#lstStock').change(function () {
    var serviceURL = '<%= Url.Action("GetStockPrice", "Delivery") %>';
    var dropDownID = $('select[id="lstStock"] option:selected').val(); 
                     // $(this).val(); is better
         alert(dropDownID); // here i get the correct selected ID
            $.ajax({
                type: "POST",
                url: serviceURL,
                data: { stockID : dropDownID},
                ....
于 2013-05-07T08:18:45.360 に答える
2

指定してみてください:

data: { stockID : dropDownID },

あなたは通り過ぎて"stockID"いないようですstockID。これに使用するのに適したツールは Fiddler です。これを使用すると、コントローラー アクションがヒットしたかどうか、およびサーバーに送信されたデータを確認できます。

于 2013-05-07T08:17:56.953 に答える