使用ajax将Json Map传递给MVC控制器



我需要将map(dictionary(和字符串参数一起传递给MVC控制器。

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。它给了我成功的回报,但没有击中控制器。

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 };

这是我最后一次尝试。

由于JSON不支持Map等ES2015构造。我们需要有如下自定义类:

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>
}

像一样在MVC中设置模型

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; }
}

像这样设置你的控制器方法

[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 });

最新更新