0

おそらくかなり簡単ですが、私はそれを整理することができません。要求されたIDがデータベースに存在しない場合、ユーザーをエラーページにリダイレクトしたいと思います。私のコード:

public ActionResult Details(int id)
    {

        DetailsAdViewModel DAVM = new DetailsAdViewModel();
        DAVM.Ad = db.Ads.Include("Images").Where(a => a.AdId == id).First();
        DAVM.FirstImage = db.Images.Where(a => a.AdId == id).OrderBy(a => a.ImageId).Take(1);

        // make sure the ad isn't deleted or that it really exists
        if (DAVM.Ad == null)
        {
            return RedirectToAction("ShowError", "Error", new { errorCode = "adDeleted" });
        }

        return View(DAVM);
    }

これは機能せず、falseIDを入力するとサーバーエラーが発生します。

4

2 に答える 2

1

.FirstOrDefault()の代わりに使用してください.First()。例外をスローする代わりに、レコードが見つからない場合、これはnullを返します。

DAVM.Ad = db.Ads.Include("Images").FirstOrDefault(a => a.AdId == id);

DAVM.Adこれで、がnullかどうかを確認できます。

if (DAVM.Ad == null)
{
    return RedirectToAction("ShowError", "Error", new { errorCode = "adDeleted" });
}
于 2012-09-20T10:45:24.063 に答える
0

解決策を見つけました:

public ActionResult Details(int id){

        if (db.Ads.Any(a => a.AdId == id))
        {
            DetailsAdViewModel DAVM = new DetailsAdViewModel();
            DAVM.Ad = db.Ads.Include("Images").Where(a => a.AdId == id).First();
            DAVM.FirstImage = db.Images.Where(a => a.AdId == id).OrderBy(a => a.ImageId).Take(1);

            return View(DAVM);
        }
        else
        {
            return RedirectToAction("ShowError", "Error", new { errorCode = "adDeleted" });
        }
    }
于 2012-09-20T10:50:18.467 に答える