2013-06-24 38 views
5

Tôi đã quen với C# và vb.net winforms, và thường có thể tìm thấy tất cả các lỗi tôi cần chỉ bằng cách thiết lập một điểm ngắt và bước qua mã của tôi.Làm cách nào để gỡ lỗi chế độ xem dao cạo mvc4?

Tôi muốn biết mình đang làm gì sai.

Tôi đặt một breakpoint ở đây:

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(); 
} 

Tuy nhiên, một lần nữa tôi không có đầu mối nơi hoặc tại sao nó errored ra chính xác. Làm thế nào tôi có thể tìm ra lý do tại sao hoặc tốt hơn nhưng nó là gì?

Tôi đang sử dụng VS2012 mvc4 C#.

+3

Không phải là câu trả lời trực tiếp, nhưng 'cnty' sẽ không bao giờ là' null'. Nó có thể là _empty_, nhưng không phải là 'null'. –

Trả lời

9

Bạn cần đặt điểm ngắt trong chính chế độ xem của mình. Bạn có thể đặt các điểm ngắt trên bất kỳ thứ gì bằng cách sử dụng cú pháp dao cạo như:

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

Nếu bạn nhận được ngoại lệ tham chiếu null, hãy đặt điểm ngắt ở nơi bạn sử dụng mô hình trong chế độ xem của mình.

+0

giả sử đó là một vấn đề, vì im thiết lập một điểm ngắt tại đầu tiên, và thậm chí tất cả các dòng trong quan điểm của tôi ... không phải của họ dừng chương trình từ thực hiện, ý tưởng? – Pakk

+0

Bạn đang gỡ lỗi trình duyệt nào? Nếu IE, bạn có thể gặp phải một số vấn đề. Trong IE, nhấp vào Tools-> internet options-> advanced tab -> bỏ chọn Disable script debugging. –

+0

không có trong firefox thực sự – Pakk

0

Trước tiên, hãy sử dụng khối try. Ngoại lệ của bạn sẽ có sẵn trong khối đánh bắt để kiểm tra, báo cáo, v.v.

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

Trong khi một mẹo tuyệt vời, điều này không thực sự giúp anh ta gỡ lỗi chính Xem chính nó –

3

Nó sẽ giúp xem ngoại lệ bạn đang thấy. Tôi đoán rằng bạn đang thấy một ngoại lệ khi trang hiển thị. Khi "David L" được xác định ở trên, bạn muốn đặt điểm ngắt trong chế độ xem Dao cạo (Index.cshtml).

Nhưng tại sao?

Nó giúp hiểu vòng đời của yêu cầu/phản hồi trong MVC. Đây là first example I found with a visual. Chắc chắn có những người khác.

  • Yêu cầu được chuyển đến điều khiển của bạn
  • Controller trả về một ActionResult: return View(cnty);
  • MVC vượt qua ActionResult để Xem bạn
  • Trường hợp ngoại lệ xảy ra trong Index.cshtml của bạn khi cố gắng sử dụng các ActionResult.

Tôi sẽ suy đoán rằng nó có liên quan đến đối tượng bối cảnh DB được xử lý. Tùy thuộc vào ORM bạn đang sử dụng, kết quả của

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

IQueryable<Client>. Bạn có thể ngạc nhiên khi biết rằng mã của bạn chưa liên lạc với cơ sở dữ liệu trước khi thực hiện return View(cnty);. Hãy thử thay vào đó:

return View(cnty.ToList()); 

Một lần nữa, lỗi chính xác bạn đang thấy là quan trọng. Đề nghị của tôi giả định Index.cshtml bắt đầu bằng:

@model IEnumerable<Client> 

Cập nhật:

mỗi OP của bình luận dưới đây, stack trace không có sẵn.Có rất nhiều câu hỏi dành riêng để xem dấu vết ngăn xếp trong trình duyệt của bạn trong quá trình phát triển. Ít nhất hãy xác nhận rằng những điều sau được đặt trong số web.config

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

Yeah thats là điểm lỗ của tôi về câu hỏi khác của tôi http://stackoverflow.com/questions/17279306/how-to-pass-one-to-many-from-controller-to-view-i n-mvc4/17279523? noredirect = 1 # comment25053983_17279523 - ở đây tôi được yêu cầu không sử dụng Ienumerable vì dữ liệu hierachy im đang cố gắng sử dụng và cho việc bạn yêu cầu tôi, Im không nhận được gì, không lỗi, không exeption, chỉ là trang có lỗi trên nó, nói cách khác tôi không biết làm thế nào để tìm thấy sự expetion – Pakk

+0

Là máy chủ web trên cùng một máy như trình duyệt của bạn? –

+0

có, tôi thực sự vẫn đang trong giai đoạn phát triển – Pakk

Các vấn đề liên quan