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> 是不是有一个内衬可以将数组转换为列表?