3

我的 asp.net mvc 应用程序中有以下操作方法:-

 public ActionResult CustomersDetails(long[] SelectRight)
        {

            if (SelectRight == null)
            {
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
                RedirectToAction("Index");
            }
            else
            {
                var selectedCustomers = new SelectedCustomers
                {
                    Info = SelectRight.Select(GetAccount)
                };




                return View(selectedCustomers);
            }
            return View();
        }

但是如果它SelectRight Array是空的,那么它将绕过if (SelectRight == null)检查,它将呈现 CustomerDetails 视图并在视图内的以下代码上引发异常

@foreach (var item in Model.Info) {
    <tr>

那么我怎样才能使空检查正常工作呢?

4

3 回答 3

8

您必须返回.RedirectToAction(..)

 public ActionResult CustomersDetails(long[] SelectRight)
 {
      if (SelectRight == null)
      {
           ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
           return RedirectToAction("Index");
      }
      else
      {
           '...
于 2012-12-23T21:53:17.457 回答
7

您可以将条件更改为以下条件:

...
if (SelectRight == null || SelectRight.Length == 0)
...

那应该有帮助。

编辑

关于上面的代码需要注意的重要一点是,在 c# 中,or 运算符||是短路的。它看到数组为空(语句为真)并且不尝试评估第二条语句 ( SelectRight.Length == 0),因此不会抛出 NPE。

于 2012-12-23T21:51:33.087 回答
4

您可以检查它是否不为空,并且长度不为零。

if (SelectRight == null || SelectRight.Length == 0) {
    ModelState.AddModelError("", "Unable to save changes...");
    return RedirectToAction("Index");
}

上面的 if 语句将捕获空值和空数组。

于 2012-12-23T21:51:39.530 回答