2013-06-24 125 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