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

时间:2019-11-05 18:40:43

标签: c# jquery asp.net-mvc model-view-controller

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

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

POST ajax调用按应有的方式工作。我可以返回并查看发送给它的值。这就是我正在使用的快速TempData。因此,我知道参数不为空。

这里是控制器:

<?php 
require_once ('SimpleXLSX.php');

if ($xlsx = SimpleXLSX::parse('test.xlsx')) {

    $Arr = array();
    $count = 0;
    $i = 0;
    $WithoutHeader = $xlsx->rows();
    unset($WithoutHeader[0]); 
    $totalRowInColumn = $xlsx->dimension()[1]; 
    foreach ($xlsx->rows()[0] as $key => $val) {
        if ($key != 0 && $key != 1) {
            for ($i = 1; $i < $totalRowInColumn; $i++) { 
                for ($j = 1; $j < $totalRowInColumn; $j++) { 
                    $Arr[$val][$WithoutHeader[$j][$i]] = 'val';
                }
            }
        }
    }
    echo '<pre>';
    print_r($Arr);
    echo '</pre>';
} else {
    echo SimpleXLSX::parseError();
}

function pr($data) {
    echo "<pre>";
    print_r($data);
    echo "</pre>";
}

令人沮丧,因为我之前曾做过这项工作。我没有更改任何会导致它现在执行此操作的操作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

在调用.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...
}