Массив string [] возвращает ошибку «Ссылка на объект не установлена ​​на экземпляр объекта». - PullRequest
0 голосов
/ 05 ноября 2019

Отправка ajax-вызова POST в контроллер с параметром массива.

У меня есть массив параметров,
У меня есть статический массив, с которым я проверяю массив параметров.
У меня есть третий массив, созданный с использованием метода .Except для создания массива, которыйэто все, кроме значений параметров.

Ajax-вызов POST работает так, как должен. Я могу вернуться и посмотреть значения, которые я отправляю ему. Вот что я делаю с этими быстрыми данными 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];
            }
        }

    }

Разочаровывает, потому что у меня была эта работа раньше. Я не изменил ничего, что заставило бы это теперь делать это. Любая помощь будет так ценится.

1 Ответ

3 голосов
/ 05 ноября 2019

Возможно, вам необходимо проверить элементы массива параметров на нуль перед вызовом .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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...