无法将动态变量转换为类

时间:2014-11-13 19:02:08

标签: c# ajax

我正在使用ajax来确定下拉列表值何时更改,并且我将3个下拉列表的值传递给方法以确定价格。我使参数动态化,我创建了一个类来保存数据但是在getNewPrice方法中,当我尝试访问var项信息时,我得到一个null。我对这些东西还很陌生,但是我得到了这个概念,我对如何将动态变量转换回字符串感到困惑,因此我可以访问这些信息。

$(document).ready(function () {
    $('#documentTypeList').change(function () {
        var modelData = {
            documentType: $("#documentTypeList").val(),
            urgency: $("#urgencyList").val(),
            numberOfPages: $("#numberOfPagesList").val()
        };
        $.ajax({
            type: "GET",
            data: modelData,
            url: "/Home/getNewPrice",
            async: true,
            success: function (result) {
                 document.getElementById('priceLabel').innerHTML = data.currentPrice;
            }
    });
    });

    public class modelData
    {
        public string documentType { get; set; }
        public string numberOfPages { get; set; }
        public string urgency { get; set; }
    }

    public JsonResult getNewPrice(modelData dropdownValues)
    {
        decimal currentPrice = Convert.ToDecimal(dropdownValues.urgency);
        // do something with value and return a decimal
        return Json(new { currentPrice = currentPrice }, JsonRequestBehavior.AllowGet);
    }

2 个答案:

答案 0 :(得分:1)

我过去使用过javascript序列化程序。使用deserialize()函数。 更具体地说=> C#

    var list = serializer.Deserialize<List<GetJson>>(Request.Form["dataDetails"].ToString());

    internal class GetJson{
        public string variable1 {get;set;} //add your properties here
    }

Javascript
                    $.fn.serializeObject = function () {
                        var o = {};
                        var a = this.serializeArray();
                        $.each(a, function () {
                            if (o[this.name] !== undefined) {
                                if (!o[this.name].push) {
                                    o[this.name] = [o[this.name]];
                                }
                                o[this.name].push(this.value || '');
                            } else {
                                o[this.name] = this.value || '';
                            }
                        });
                        return o;
                    };

                    $.ajax({
                        url: "url",
                         dataType: "json",
                         data: {
                            DataDetails: "[" + JSON.stringify($("#form1").serializeObject()) + "]"
                                },

如果你需要它更动态,你可以使用动态类型。

var list = serializer.Deserialize<List<dynamic>>(Request.Form["dataDetails"].ToString());

答案 1 :(得分:0)

模型绑定器需要知道您的特定类型。它遍历属性并分配值。

尝试

 url: '/Home/getNewPrice',
 data: modelData

public JsonResult getNewPrice(modelData dropdownValue)
{
    //...
    return Json(new { currentPrice = currentPrice }, JsonRequestBehavior.AllowGet);
}

document.getElementById('priceLabel').innerHTML = data.currentPrice;