我该如何调试mvc4 razor视图?
我已经习惯了C#和vb.net winforms,通常可以通过设置断点和单步执行代码来找到我需要的所有错误。
我想知道我做错了什么。
我在这里放置一个断点:
public ActionResult Index(int id) { var cnty = from r in db.Clients where r.ClientID == id select r; if (cnty != null) // breakpoint here { return View(cnty); // F11 jumps over this section of code returning me to the error page below. } return HttpNotFound(); }
然而,我再也不知道它究竟出错的地方或原因。 我怎样才能找出原因或更好的错误呢?
我正在使用VS2012 mvc4 c#。
您需要在视图中放置断点。 您可以使用razor语法在任何内容上放置断点,例如:
@Html.ActionLink @{ var x = model.x; }
如果要获取空引用exception,请在视图中使用模型的位置放置断点。
看到你看到的exception会有所帮助。 我猜你在页面渲染时看到了exception。 正如上面标识的“David L”,您希望在Razor视图( Index.cshtml
)中设置断点。
但为什么?
它有助于理解MVC中请求/响应的生命周期。 这是我用视觉发现的第一个例子 。 肯定会有其他人。
- 请求将路由到您的Controller
- Controller返回一个
ActionResult
:return View(cnty);
- MVC将
ActionResult
传递给您的View - 尝试使用
ActionResult
时,Index.cshtml
会发生exception。
我将推测它与已处置的DB上下文对象有关。 根据您使用的ORM,结果
from r in db.Clients where r.ClientID == id select r
是一个IQueryable
。 在return View(cnty);
之前,您可能会惊讶地发现您的代码尚未联系数据库return View(cnty);
被执行。 试试这个:
return View(cnty.ToList());
同样,您看到的确切错误很重要。 我的建议假设Index.cshtml
以:
@model IEnumerable
更新:
根据下面的OP评论,堆栈跟踪不可用。 有许多问题专门用于在开发过程中查看浏览器中的堆栈跟踪。 至少确认在web.config
设置了以下内容
首先,使用try
块。 您的例外将在catch块中提供,用于检查,报告等。
public ActionResult Index(int id) { try { var cnty = from r in db.Clients where r.ClientID == id select r; if (cnty != null) // breakpoint here { return View(cnty); // F11 jumps over this section of code returning me to the error page below. } return HttpNotFound(); } catch (Exception ex) { //report error } }