Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度及;ASP.NET MVC-后端接收时参数为null_Javascript_C#_Angularjs_Json_Asp.net Mvc - Fatal编程技术网

Javascript 角度及;ASP.NET MVC-后端接收时参数为null

Javascript 角度及;ASP.NET MVC-后端接收时参数为null,javascript,c#,angularjs,json,asp.net-mvc,Javascript,C#,Angularjs,Json,Asp.net Mvc,我知道这在堆栈溢出问题上已经被问过很多次了,但我遇到了一些奇怪的问题,我想知道如何才能将其更改为正常工作 我读到的所有东西都说,当向MVC传回一个对象时,请确保JSON参数名称与C#的名称匹配,并确保MVC对象模型相同。当我尝试示例2时,我在控制器中得到对象的空值,但如果我使用示例1,我会得到所需的数据 我想使用示例2,我猜问题的出现是因为WebApiConfig或global.asax有关,我希望有人能澄清一下 型号 public class SearchCredential { pu

我知道这在堆栈溢出问题上已经被问过很多次了,但我遇到了一些奇怪的问题,我想知道如何才能将其更改为正常工作

我读到的所有东西都说,当向MVC传回一个对象时,请确保JSON参数名称与C#的名称匹配,并确保MVC对象模型相同。当我尝试示例2时,我在控制器中得到对象的空值,但如果我使用示例1,我会得到所需的数据

我想使用示例2,我猜问题的出现是因为WebApiConfig或global.asax有关,我希望有人能澄清一下

型号

public class SearchCredential
{
    public string Employee { get; set; }
    public string CostCenter { get; set; }
}
控制器

[HttpPost]
public dynamic SearchEmployees(SearchCredential searchCriteria)
{
   // some code goes here   
}
Javascript示例1:

vm.searchCriteria = {"employee": vm.searchEmployee,
                     "costCenter": vm.searchCostCenter
                    };

$http.post(baseURL + 'SearchEmployees', vm.searchCriteria )
vm.searchCriteria = {"employee": vm.searchEmployee,
                     "costCenter": vm.searchCostCenter
                    };
$http.post(baseURL + 'SearchEmployees', { searchCriteria: vm.searchCriteria })
Javascript示例2:

vm.searchCriteria = {"employee": vm.searchEmployee,
                     "costCenter": vm.searchCostCenter
                    };

$http.post(baseURL + 'SearchEmployees', vm.searchCriteria )
vm.searchCriteria = {"employee": vm.searchEmployee,
                     "costCenter": vm.searchCostCenter
                    };
$http.post(baseURL + 'SearchEmployees', { searchCriteria: vm.searchCriteria })

angular中post方法的签名是
post(url、数据、[config])

在第一种方法中,您的做法是正确的。即将数据作为对象发布

{"employee": vm.searchEmployee,"costCenter": vm.searchCostCenter }
在第二种方法中,您将上述对象封装在另一个对象中,传递的数据如下

{ {"employee": vm.searchEmployee,"costCenter": vm.searchCostCenter } }
asp.net所做的是,每当请求传入时,它都会匹配可用方法的名称和签名,并使用参数调用该方法。C#解析输入参数并将匹配的值分配给匹配的属性名。 在您的例子中,有一个post方法接受一个对象参数,其属性为
Employee
CostCenter

在示例1中,输入的json数据是
{“employee”:vm.searchEmployee,“costCenter”:vm.searchCostCenter}
,它将被分配相应的C#变量

在示例2中,数据将被解析为值为
{“employee”:vm.searchEmployee,“costCenter”:vm.searchCostCenter}
的匿名对象。由于JSON中的属性未命名,并且C#无法找到相应的位置来分配值,因此输入将为null

只是为了理解 如果将c#对象声明为公共类,则可以获得该值

SearchCredential
{
    public string Employee { get; set; }
    public string CostCenter { get; set; }

    public SearchCredential credential { get; set; }
}

在本例中,您将获得示例2中第三个属性中的数据,示例2中的代码应该可以正常工作。你在运行与你在这里发布的内容不同的东西吗?是的。只要名称与您的操作方法Parma name匹配,它就应该可以工作。感谢大家花时间回顾我的问题。我发现示例2不起作用