string[] 数组返回“对象引用未设置为对象实例”的错误。

Posted

技术标签:

【中文标题】string[] 数组返回“对象引用未设置为对象实例”的错误。【英文标题】:string[] array is returning error of "Object reference not set to an instance of an object." 【发布时间】:2020-03-02 04:39:44 【问题描述】:

使用数组参数向控制器提交 POST ajax 调用。

我有一个参数数组, 我有一个静态数组,我用它来检查参数数组。 我使用 .Except 方法创建了第三个数组,以创建一个除参数值之外的所有内容的数组。

POST ajax 调用正常工作。我可以返回并查看我发送给它的值。这就是我用那个快速的 TempData 所做的。所以,我知道参数不为空。

这里是控制器:

    [HttpPost]
    public ActionResult MyAction(string[] subLineNames)
    
       //Static array to check against parameter
        string[] sublineArray = new string[]  "BI/PD", "Hired", "Non-Owned", "PIP", "Addtl-PIP", "Medical Payments", "UM PD", "UM CSL", "UIM CSL", "Terrorism" ;

        //Create new array for all minus the values in the parameter
        /* The error happens here. The .Trim is causing some issue I can't see.  */
        /* I know that jquery ajax call is sending a bunch of white space, so I use trim to get rid of the white space characters. */
        string[] DifferArray = sublineArray.Except(subLineNames.Select(m => m.Trim())).ToArray();

        //Test to ensure the array parameter is not empty. (it works and brings back what I sent to it)
        if (subLineNames != null)
        
            for (int i = 0; i < subLinesNames.Length - 1; i++)
            
                TempData["AA"] += subLineNames[i];
            
        

    

令人沮丧,因为我之前有这个工作。我没有改变任何会导致它现在这样做的东西。任何帮助将不胜感激。

【问题讨论】:

这能回答你的问题吗? What is a NullReferenceException, and how do I fix it? @swapmeet_Lou 你想通过你的 ajax 完成什么?你想改变视图吗?您正在从控制器返回一个字符串 "Testing" 发生在哪一行和哪个变量上?可能 subLineNames 为空 @Ryan Wilson。我将这些值提交到我设置的表中。我把它排除在控制器之外,因为这不是问题所在。另外,如果我不能让它以这种简单的方式工作,我就不能将它们插入表中。这实际上是一周前的工作,而我所做的事情导致这搞砸了。我只是不明白为什么。即使在这个最基本的水平 如果subLineNames 的元素包含null 值,那么您尝试在其上调用.Trim().. ker-pow。没有看到实际值,就无法确定。我会在此方法上设置一个断点并检查实际存在的内容..然后将其发布在这里,以便我们提供更多帮助。最后,您的操作方法不会返回任何内容。 【参考方案1】:

也许您需要在对参数数组中的元素调用 .Trim() 之前对其进行空值检查:

string[] DifferArray = sublineArray.Except(subLineNames.Where(m => !string.IsNullOrWhiteSpace(m)).Select(m => m.Trim())).ToArray();

更好的是,您可以存储对已清理参数数组的引用:

[HttpPost]
public ActionResult MyAction(string[] subLineNames)

    if (subLineNames == null)
    
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest, $"You must provide nameof(subLineNames).");
    

    var sanitizedSubLineNames = subLineNames.Where(m => !string.IsNullOrWhiteSpace(m)).Select(m => m.Trim());
    var sublineArray = new string[]  "BI/PD", "Hired", "Non-Owned", "PIP", "Addtl-PIP", "Medical Payments", "UM PD", "UM CSL", "UIM CSL", "Terrorism" ;
    var differArray = sublineArray.Except(sanitizedSubLineNames).ToArray();

    // Do something...

【讨论】:

谢谢。 .Where(m => !string.IsNullOrWhiteSpace(m)) 为我解决了这个问题。在我的第一次 NOT NULL 评估中我绝对是错误的,但我一生都无法弄清楚它是如何发生的,以及我可以去哪里找到答案来解决它。我在上面告诉 Sam 我将复选框值发送到控制器并检查了我实际发送的内容。我还将深入研究您提供的经过消毒的参考资料。谢谢。 很高兴您解决了这个问题。干杯。

以上是关于string[] 数组返回“对象引用未设置为对象实例”的错误。的主要内容,如果未能解决你的问题,请参考以下文章

通过重写 Java 的 String.toUpperCase() 返回空字符数组 [重复]

从 Spring WebFlux 返回 Flux<String> 返回一个字符串而不是 JSON 中的字符串数组

Hive GenericUDF 返回数组<String> 错误

string.split 返回一个字符串 [] 我想要一个 List<string> 是不是有一个内衬可以将数组转换为列表?

MongoDB:$lookup 返回空数组

C++怎么把string 转换为char型数组