我该如何调试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返回一个ActionResultreturn 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 } }