#c# #asp.net-mvc
#c# #asp.net-mvc
Вопрос:
Когда я пытаюсь скомпилировать свой код, в предложении ‘Where’ возникает ошибка исключения ArgumentNullException. Я думаю, что я все делаю хорошо в этом. Нужно ли мне какое-либо начальное значение (в параметре ActionResult)?
Контроллер:
public class HomeController : Controller
{
private IDocuments _docs;
public ActionResult Index(string custNr)
{
var docsModel = _docs.GetAll();
var model = docsModel
.Where(w => w.docsModel.ACCOUNT.Contains(custNr) || custNr == null) //here shows me an error
.Select(s => new DocumentsModel
{
Company = s.docsModel.COMPANY,
CustName = s.docsModel.NAME,
Account = s.docsModel.ACCOUNT.Trim(),
})
.OrderBy(o => o.DATE);
return View(model);
}
Вид:
<th>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<p>
Name: @Html.TextBox("custNr")
<input type="submit" value="Search" />
</p>
}
</th>
Необходимо добавить, что столбец in Account заполняется значениями, не имеет нулей
Ответ №1:
Это должно помочь инвертировать ваше OR-выражение:
.Where(w => custNr == null || w.docsModel.ACCOUNT.Contains(custNr) )
Предложение OR всегда вычисляется слева направо. То, как вы это сделали, сначала выполнит Contains
функцию, а затем проверит, является ли входной параметр null .
Наоборот Contains
, функция -не будет вызываться, если аргумент равен null, поскольку выполняется первое предложение OR-, и оно не будет выполнять второе.
Contains
строка никогда не должна вызываться с null в качестве входного параметра.
Исключения
Исключение ArgumentNullException
значение равно нулю.