繁体   English   中英

将 Json Map 传递给 MVC controller 使用 Z2705A83A5A0659CCEDA5458397263

[英]Passing Json Map to MVC controller using ajax

我需要将 map (字典)与字符串参数一起传递给 MVC controller。

var reportName= 'ReportName';

    var FilterValues = new Map([
[0, "value1"],
[1, "value2"],
[2, "value3"],
]);

var model = { reportName: reportName, FilterValues: JSON.parse(FilterValues) };
        $.ajax({
            url: '/Reports/ExportReport/',
            type: 'POST',
            contentType: "application/json",
            data: model,
        success: function(){
            alert('success');
        }, 
        error: function(){
            alert('failure');
        }
    });


 public void ExportReport(string reportName, Dictionary<int, string> FilterValues)

        {

还尝试使用 Object 而不是 map。 它让我成功,但没有击中 controller。

let FilterValues = {
            1: "value1",
            2: "value2",
            3: "value3",
        };

        var report = 'test';
      //  var data = ('#DesignationReport').DataTable().$('input,select,textarea').serialize();
        var model = { reportName: report, FilterValues: FilterValues };

这是我尝试的最后一件事。

像这样在 MVC 中设置您的 model

        public class SpecialDataModel
        {
            public string reportName { get; set; }
            public List<SingleFilterValue> FilterValues { get; set; }
        }

        public class SingleFilterValue
        {
            public int id { get; set; }
            public string value{ get; set; }
        }

像这样设置您的 controller 方法

        [HttpPost]
        public void ExportReport(SpecialDataModel myData)
        {



        }

像这样为您的 ajax 数据属性设置数据

var reportName= 'ReportName';
var FilterValues = [];
FilterValues.push({'id': 0, 'value': 'value1'});
FilterValues.push({'id': 1, 'value': 'value2'});
FilterValues.push({'id': 2, 'value': 'value3'});

var model = JSON.stringify({ 'reportName' : reportName, 'FilterValues' : FilterValues });

由于 JSON 不支持 ES2015 构造,例如 Map。 我们需要自定义 class 如下:

 public class ViewModel
    {
        public List<FilterValue> FilterValues { get; set; }
        public string ReportName { get; set; }
    }

    public class FilterValue
    {
        public int Id { get; set; }
        public string Value { get; set; }
    }

您的发布方法将是:

[HttpPost]
        public ActionResult ExportReport(ViewModel model)
        {
            var report = model.ReportName;
            var values = model.FilterValues;
            return new EmptyResult();
        }

然后视图的脚本将是:

@section scripts{
    <script>
        $(function () {
            var reportName = 'ReportName';
            var filterValues = [];

            filterValues.push({ 'Id': 0, 'Value': 'value1' });
            filterValues.push({ 'Id': 1, 'Value': 'value2' });
            filterValues.push({ 'Id': 2, 'Value': 'value3' });

            var model = JSON.stringify({ ReportName: reportName, FilterValues: filterValues});
            $.ajax({
                url: '/Home/ExportReport/',
                type: 'POST',
                contentType: "application/json",
                data:  model,
                success: function () {
                    alert('success');
                },
                error: function () {
                    alert('failure');
                }
            });
        });
    </script>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM