【问题标题】:Angular & ASP.NET MVC - Parameter is null when received by backendAngular & ASP.NET MVC - 后端接收到的参数为空
【发布时间】:2015-12-07 01:11:59
【问题描述】:

我知道在堆栈溢出时已多次询问过此问题,但我遇到了一些奇怪的事情,想了解如何将其更改为正常工作。

我读到的所有内容都说,当将对象传递回 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 )

Javascript 示例 2:

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

【问题讨论】:

  • 示例 2 中的代码应该可以正常工作。您运行的内容与您在此处发布的内容不同吗?
  • 是的。只要名称与您的操作方法帕尔马名称匹配,它就应该起作用
  • 感谢大家抽出宝贵时间查看我的问题。我发现示例 2 不起作用

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


【解决方案1】:

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# 找不到对应的位置来赋值,所以输入将为空。

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

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

    public SearchCredential credential { get; set; }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2021-06-16
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多