首页 > 解决方案 > 通过 AJAX 将 JSON 数据传递给控制器​​时的 NULL 值

问题描述

尝试将以下 JSON 从视图传递到控制器

{
    "allselected": false,
    "selectedIds": ["", "all"],
    "targetControl": "Studieniva",
    "targetSource": "studienivalist",
    "dependency": [{
        "name": "ShopNo",
        "selectedvalues": "311"
    }, {
        "name": "Institution",
        "selectedvalues": ["all", "UIO"]   // THIS IS COMING AS NULL AT CONTROLLER  . OCCURS ONLY WHEN MULTIPLE ITEMS UNDER dependency
    }]
}

发送请求的 Javascript 代码如下(尝试同时发出多个请求并根据每个请求的响应加载一些下拉菜单)

        var targetcontrols_array = targetControl.split(',');
        var targetsource_array = targetSource.split(',');
        const arrOfPromises = targetcontrols_array.map(function(item, index) {
            var control_name = item;
            var source = targetsource_array[index];
            var request_data = JSON.stringify({ allselected: allselected_flag, selectedIds: selectedvalues, targetControl: control_name, targetSource: source, dependency: dependencyOptions });
            console.log("req:"+request_data); //SAMPLE JSON ADDED On TOP
            return new Promise((resolve) => {
                $.ajax({
                    url: action_url,
                    type: 'POST',
                    traditional: true,
                    async: false,
                    data: request_data,
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',
                    success: function (response) {
                       //process response
                    }
                })
            });
        });
        Promise.all(arrOfPromises); 

MVC 控制器动作如下

 [HttpPost]
 public JsonResult CascadingDropDown(DynamicFormSelectModel model)
 {
     model.dependency  values are not coming correctly . Observing that the value of SelectedValues is NULL in some cases
     ( OCCURS ONLY WHEN MULTIPLE ITEMS UNDER dependency )
 }

public class DynamicFormSelectModel
{
    public bool allselected { get; set; }
    public string[] selectedIds { set; get; }
    public string targetSource { set; get; }
    public string targetControl { set; get; }
    public List<DynamicFormDependencyOptions> dependency { set; get; }

}
public class DynamicFormDependencyOptions
{
    public string Name { get; set; }
    public string SelectedValues { get; set; }
}

在尝试读取请求 model.dependency values 时,有时会得到 NULL ,即使值是从 View 传递的(示例附加 JSON 传递 2 个值 "name": "Institution", "selectedvalues": ["all", "UIO"] , 但在控制器中我得到了 NULL 在此处输入图像描述 . 主要发生在依赖属性下存在多个项目并且不知道为什么它作为 NULL 出现时

标签: javascriptc#jqueryajaxasp.net-mvc

解决方案


    public class DynamicFormDependencyOptions
{
    public string Name { get; set; }
    public string SelectedValues { get; set; }
}

将其更改为

public class DynamicFormDependencyOptions
    {
        public string Name { get; set; }
        public string[] SelectedValues { get; set; }
    }

此代码将SelectedValues作为字符串对象,但数据采用字符串数组形式,使 SelectedValues 成为字符串数组,您将得到它....并相应地更改以下代码以解析字符串数组,就像您对selectedIds所做的那样。


推荐阅读