javascript - Angular 和 ASP.NET MVC - 后端收到时参数为空

标签 javascript c# angularjs json asp.net-mvc

我知道这个问题在堆栈溢出上已经被问过很多次了,但我遇到了一些奇怪的事情,并且想了解如何更改它以使其正常工作。

我读到的所有内容都表明,当将对象传回 MVC 时,请确保您的 JSON 参数名称与 C# 的参数名称匹配,并确保 MVC 对象模型相同。当我尝试示例 2 时,我得到 Controller 中对象的空值,但如果我使用示例 1,我会得到所需的数据。

我想使用示例 2,我猜测问题的发生是因为与 WebApiConfig 或 global.asax 有关,希望有人能够澄清。

型号

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

Controller

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

Javascript 示例 2:

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

最佳答案

Angular中post方法的签名是post(url, data, [config])

在第一种方法中,你做得对。即将数据作为对象发布

{"employee": vm.searchEmployee,"costCenter": vm.searchCostCenter }

在第二种方法中,您将上述对象封装在另一个对象中,传递的数据将类似于

{ {"employee": vm.searchEmployee,"costCenter": vm.searchCostCenter } }

asp.net 所做的是,每当请求到来时,它都会匹配可用方法的名称和签名,并使用参数调用该方法。 C# 解析输入参数并将匹配的值分配给匹配的属性名称。 在您的情况下,您有一个 post 方法接受一个具有属性 EmployeeCostCenter 的对象参数。

在示例 1 中,输入 json 数据为 {"employee": vm.searchEmployee,"costCenter": vm.searchCostCenter } 并将为其分配相应的 C# 变量。

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

仅供理解 如果将c#对象声明为公共(public)类,则可以获得该值

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

    public SearchCredential credential { get; set; }
}

在这种情况下,您将在第三个属性中获取数据,例如 2

关于javascript - Angular 和 ASP.NET MVC - 后端收到时参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34124952/

相关文章:

Javascript - 需要一个正则表达式来匹配美国附表 B (HTS) 编号。 "0000.00.0000"

c# - 三层模式与 MVVM 的比较

angularjs - 如何绑定(bind)到指令属性?

javascript - 在JS中匹配之前未匹配的正则表达式(url vs图片)

javascript - 将多个 Controller 中的 AngularJS 范围对象合并为一个对象

javascript - jQuery 按链接 x 次然后执行此操作?

javascript - 在 div 中查找一个值并替换

javascript - 我对 jQuery 的第一次挖掘

c# - 从本地xampp mysql-database获取数据

c# - Autofac 构造函数按属性注入(inject)