2013-06-24 93 views
5

我习惯于C#和vb.net winforms,通常可以通过设置断点并遍历我的代码来找到所需的所有错误。如何调试mvc4剃须刀视图?

我想知道我做错了什么。

我把一个断点位置:

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#。

+3

不是直接的答案,但'cnty'永远不会'null'。它可能是_empty_,但不是'null'。 –

回答

9

您需要在视图本身中放置断点。您可以将使用剃刀语法上的任何断点如:

@Html.ActionLink 
@{ var x = model.x; } 

如果你得到一个空引用异常,把断点你在哪里消费在您的视图模型的地方。

+0

假设这是一个问题,因为即时设置一个断点,甚至在我看来,甚至所有行...他们都不会阻止程序执行,想法? – Pakk

+0

你在调试什么浏览器?如果IE,你可能会遇到一些问题。在IE中,单击工具 - > Internet选项 - >高级选项卡 - >取消选中禁用脚本调试。 –

+0

没有在Firefox中实际上 – Pakk

0

首先,使用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 
      } 
     } 
+0

虽然一个很好的提示,这实际上并没有帮助他调试视图本身 –

3

这将有助于查看您看到的异常。我猜你在页面呈现时看到一个异常。正如上面确定的“David L”,您想在剃刀视图(Index.cshtml)中设置断点。

但是为什么?

它有助于理解MVC中请求/响应的生命周期。这里是first example I found with a visual。肯定还有其他人。

  • 请求路由到您的控制器
  • 控制器返回一个ActionResultreturn View(cnty);
  • MVC试图使用ActionResult当经过ActionResult到View
  • 唯一的例外发生在你的Index.cshtml

我打算推测它与处置DB上下文对象有关。根据您所使用的ORM的

from r in db.Clients 
where r.ClientID == id 
select r 

结果是IQueryable<Client>。在执行return View(cnty);之前,您可能会惊讶地发现您的代码尚未与数据库联系。试试这个:

return View(cnty.ToList()); 

同样,你所看到的确切的错误是重要的。我的建议假定Index.cshtml开始:

@model IEnumerable<Client> 

更新:下面

每OP的评论,堆栈跟踪不可用。有许多问题致力于在开发过程中查看浏览器中的堆栈跟踪。至少确认以下内容已设置在你的web.config

<system.web> 
    <customErrors mode ="Off" /> 
</system.web> 
+0

是啊这是我的洞穴点我的另一个问题http://stackoverflow.com/questions/17279306/how-to-pass-one-to-many-from-controller-to-view-i n-mvc4/17279523?noredirect = 1#comment25053983_17279523 - 在这里我被告知不使用Ienumerable ,因为我试图使用的层次数据,并为您要求我的预期,我没有得到任何东西,没有错误,没有exeption,只是与它的错误页面,换句话说,我不知道如何找到期待 – Pakk

+0

Web服务器是否在您的浏览器在同一台计算机上? –

+0

是的,我实际上仍处于开发阶段 – Pakk