【问题标题】:List<type> parameter in asp mvc controller action returns null and not an empty listasp mvc 控制器操作中的 List<type> 参数返回 null 而不是空列表
【发布时间】:2011-07-07 03:29:19
【问题描述】:

我正在使用带有 jQ​​uery.ajax 的 ASP MVC 3 来发布带有传统:true 的数组值。这适用于具有值的数组。我唯一的问题是,如果 js 中的数组为空,则传递给控制器​​操作中相应参数的值始终为空。如何让 mvc 返回 EMPTY 列表而不是 NULL,这样我就不必到处检查 null 来使用 LINQ?

Javascript 代码

$.ajax({
    url:"/Foo/BarAction",
    type:"POST",
    traditional:true,
    data:{myParam:[]}
}):

C# ASP MVC 代码

public class FooController : Controller
{
        public ActionResult BarAction(List<string> myParam)
        {
            //myParam is null, and not an empty list
        }

}

【问题讨论】:

  • 你能发布一些代码吗
  • 我刚刚在上面的编辑中添加了一个示例!

标签: ajax jquery asp.net-mvc


【解决方案1】:

要返回一个空列表,您至少需要对其进行初始化。因此,在您退货之前,您需要:

myParams = new List<string>();

【讨论】:

  • 您错过了 ASP.MVC 路由处理 POST 数组的解析并使用反射和约定将这些值映射到控制器操作的点。 javascript 数组,如果它有值,将自动转换为列表。如果我发送了 {firstName:"John", lastName:"Doe", age:50} 并且我的控制器操作有 BarAction(string firstName, string lastName, int age),路由引擎将处理类型转换并找到合适的调用的参数。我想知道如何让框架将非空集合作为空数组的默认值传递!
  • 澄清一下,我从来没有真正调用过 fooController.BarAction(new List())。 MVC 按照惯例通过路由自动执行此操作。
  • 好的,我明白你现在在说什么了。在这种情况下,您可能需要查看自定义模型绑定器。熟悉这些吗?
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2017-07-16
  • 2018-08-08
相关资源
最近更新 更多