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);
    }

这不起作用,如果我输入错误的 ID,则会出现服务器错误。

4

2 回答 2

1

使用.FirstOrDefault()而不是.First(). 如果没有找到记录,这将返回 null 而不是抛出异常:

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

现在您可以检查是否DAVM.Ad为空:

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

找到了解决方案:

公共动作结果详细信息(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 回答