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>

では、null チェックを正常に機能させるにはどうすればよいでしょうか。

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 演算子||が短絡していることです。配列が null (ステートメントが true) であることを認識し、2 番目のステートメント ( SelectRight.Length == 0) を評価しようとしないため、NPE はスローされません。

于 2012-12-23T21:51:33.087 に答える
4

null ではなく、長さがゼロでないことを確認できます。

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

上記の if ステートメントは、null 値と空の配列の両方をキャッチします。

于 2012-12-23T21:51:39.530 に答える