控制器操作查找职位发布。如果找不到工作,只需返回简单的View("NotFound")
:
[Route("jobs/{id}")]
public ActionResult Detail(int id) {
Job job = JobRepository.GetByIdDetail(id);
if (job == null)
return View("NotFound");
}
NotFound.cshtml:
@{
ViewBag.Title = "Job not found";
ViewBag.Subtitle = "I’m sorry, it looks like this job has been closed.";
}
<main>
<div class="container">
@ViewBag.Subtitle
</div>
</main>
而不是View
,我得到了:
内部服务器错误500
堆栈跟踪:
参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'CeeVee.Controllers.JobsController
为什么它不会只显示NotFound
视图?为什么它仍在搜索id
参数,在这种情况下它不再相关?
更新 不明白为什么它不会返回简单的愚蠢视图。 即使我添加动作方法,也会发生同样的错误。
[Route("jobs/notfound")]
public ActionResult NotFound ()
{
return View("NotFound");
}
/ jobs / notfound 给出错误500?!?!?!?!??!? '{“对象引用未设置为对象的实例。”}'Whaaat对象???
我想关闭这个问题:(问题出在我的LAYOUT.CSHTML。对不起伙计......
答案 0 :(得分:1)
将您的控制器代码更改为:
[Route("jobs/{id}")]
public ActionResult Detail(int? id) {
if(!id.HasValue) //you can also add '|| id.Value > 0' if your ids cannot be zero
return View("NotFound");
Job job = JobRepository.GetByIdDetail(id.Value);
if (job == null)
return View("NotFound");
}