2013-06-24 14 views
5

Ich bin an C# und vb.net winforms gewöhnt und kann normalerweise alle Fehler finden, die ich brauche, nur indem ich einen Haltepunkt setze und meinen Code durchtrete.Wie kann ich mvc4 Rasierer Ansichten debuggen?

Ich würde gerne wissen, was ich falsch mache.

Ich platzieren einen Haltepunkt hier:

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

Wieder einmal habe ich keine Ahnung, wo oder warum es errored genau aus. Wie kann ich herausfinden, warum oder besser noch welchen Fehler es wirft?

Ich benutze VS2012 mvc4 C#.

+3

keine direkte Antwort ist, aber 'cnty' wird niemals' null' sein. Es kann _empty_ sein, aber nicht 'null'. –

Antwort

9

Sie müssen Haltepunkte in Ihrer Sicht selbst setzen. Sie können Haltepunkte auf etwas legen Syntax Rasiermesser wie:

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

Wenn Sie einen NULL-Verweis Ausnahme erhalten, setzen Sie Stützpunkte auf Orte, wo man das Modell in der Ansicht verbrauchen.

+0

Angenommen, das ist ein Problem, da ich einen Haltepunkt an der allerersten Stelle gesetzt habe, und sogar alle Zeilen in meiner Ansicht ... nicht von ihnen stoppen die Ausführung des Programms, Ideen? – Pakk

+0

In welchem ​​Browser debuggen Sie? Wenn IE, können Sie auf einige Probleme stoßen. Klicken Sie im IE auf Extras -> Internetoptionen -> Erweitert -> deaktivieren Sie Skriptdebugging deaktivieren. –

+0

nein in firefox eigentlich – Pakk

0

Verwenden Sie zuerst einen try Block. Ihre Ausnahme wird im Catch-Block für die Inspektion, Berichterstattung usw. verfügbar sein.

+0

Während ein ausgezeichneter Tipp, das hilft ihm nicht wirklich das Debuggen der Ansicht selbst –

3

Es würde helfen, die Ausnahme zu sehen, die Sie sehen. Ich vermute, dass Sie eine Ausnahme sehen, wenn die Seite gerendert wird. Wie oben "David L" angegeben, möchten Sie Ihren Haltepunkt in der Razor-Ansicht (Index.cshtml) festlegen.

Aber warum?

Es hilft, den Lebenszyklus einer Anfrage/Antwort in MVC zu verstehen. Hier ist die first example I found with a visual. Es gibt sicher andere.

  • Anfrage wird der Controller geroutet
  • der Controller eine ActionResult zurück: return View(cnty);
  • MVC die ActionResult auf Ihre View
  • Die Ausnahme tritt in Ihrem Index.cshtml passiert, wenn versucht wird, die ActionResult zu verwenden.

Ich spekuliere, dass es etwas mit einem entsorgten DB-Kontextobjekt zu tun hat. Je nach ORM Sie verwenden, das Ergebnis der

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

ist ein IQueryable<Client>. Sie werden vielleicht überrascht sein, dass Ihr Code die Datenbank noch nicht kontaktiert hat, bevor return View(cnty); ausgeführt wird. Versuchen Sie dies stattdessen:

return View(cnty.ToList()); 

Wieder ist der genaue Fehler, den Sie sehen, wichtig. Mein Vorschlag geht davon aus Index.cshtml beginnt mit:

@model IEnumerable<Client> 

Update:

Per OP Kommentar unten, der Stack-Trace ist nicht verfügbar.Es gibt viele Fragen, die dazu dienen, den Stack-Trace während der Entwicklung in Ihrem Browser zu sehen. Bestätigen Sie zumindest, dass in Ihrem Gerät web.config

+0

Ja, das war mein Loch Punkt über meine andere Frage http://stackoverflow.com/questions/17279306/how-to-pass-one-to-many-from-controller-to-view-i n-mvc4/17279523? noredirect = 1 # comment25053983_17279523 - hier wurde mir gesagt, nicht Ienumerable wegen der Hierachie Daten im Versuch zu verwenden und für die Erwartung, die Sie mich fragen, ich bekomme nichts, kein Fehler, nein Ausnahme, nur die Seite mit Fehler auf, also ich nicht konw, wie Sie die Expetion finden – Pakk

+0

Ist der Webserver auf dem gleichen Computer wie Ihr Browser? –

+0

Ja, ich bin eigentlich noch in der Entwicklungsphase – Pakk

Verwandte Themen