2011-01-10 6 views
37

Können Sie mir einen allgemeinen Hinweis zum Debuggen von ASP.NET MVC Binding geben?Best Practices zum Debuggen von ASP.NET MVC Binding

Wenn alles wie erwartet funktioniert, ASP.NET MVC ist großartig. Aber wenn etwas nicht funktioniert, wie etwas aus einem unbekannten Grund nicht bindet, finde ich es schwierig, das Problem aufzuspüren und zu finden, dass ich Stunden damit verbringe, ein scheinbar einfaches Problem aufzuspüren.

sie sich vor, Sie in einer Controller-Methode, wie dieses Land:

[HttpPost] 
public ActionResult ShipmentDetails(Order order) 
{ 
    //do stuff 
} 

Lassen Sie sich weiter vorstellen, dass die Order-Klasse wie folgt aussieht:

public class Order 
{ 
    public decimal Total {get; set;} 
    public Customer Customer {get; set;} 
} 

public class Customer 
{ 
    public string Name {get; set;} 
    public string Phone {get; set;} 
} 

Was gute Orte sind, wenn Order in dem Start Controller-Methode ist nicht korrekt gebunden? Was sind gute Startpunkte, wenn nur Teile der Order korrekt gebunden sind?

Antwort

20

Wie Darin vorgeschlagen hat, untersuchen Sie, was vom Client an den Server gesendet wird, indem Sie etwas wie Firebug, Fiddler oder ein anderes Web-Debugging-Proxy-Tool verwenden.

Wenn dies nicht möglich ist, können Sie den Quellcode durchgehen, um zu sehen, was beim Binden passiert.

Zwei Möglichkeiten, die ich empfehlen kann dies tun, sind

  1. Include the System.Web.Mvc source code project in your application and reference this. Dies ist gut für das Lernen, aber wahrscheinlich nicht für eine kommerzielle Anwendung empfohlen.

  2. Laden Sie die Symbole für System.Web.Mvc von dem Microsoft Symbol Server, um Ihre Einstellungen ändern können debug framework source code and set a break point appropriately to step through sein.

+0

'" Setze einen richtigen Schnittpunkt "' Wo ist das für den Modellbinder? – StuperUser

+2

Sie würden wollen, um einen Haltepunkt auf dem MVC-Framework des 'DefaultModelBinder' Klasse festlegen' öffentliche virtuelle Objekt BindModel (Controllercontroller, ModelBindingContext Binding) 'Methode –

+1

Nach der Aktivierung/die Symbole herunterzuladen, wie können Sie auf die Quelle tatsächlich bekommen für' DefaultModelBinder', um den Haltepunkt zu setzen? –

3

Ein guter Ort zum Starten ist Download und Installation FireBug und sehen, was vom Client auf den Server geschrieben wird. Dann werden Sie sehen, was fehlt, inkorrekt ist ... Blogposts wie Model Binding to a List sind gute Lesevorgänge, um sich mit der richtigen Syntax vertraut zu machen, die der Standardmodellbinder verwendet.

+0

Aber es ist Ihnen nicht sagen, was die Bindung MVC mit den Daten tut ... ist es eine Möglichkeit, das Modell Bindungsprozess zu verfolgen? – Dani

+0

@Dani, was möchtest du über die Modellbindung wissen? Es ist ziemlich direkt: Ein Eingabefeld mit dem Namen 'Customer.Name' wird an die' Name' -Eigenschaft einer komplexen 'Customer' -Eigenschaft eines Modells gebunden. Es ist nichts besonderes daran. Und wenn Sie das Konzept der Listen und Sammlungen kennen, wissen Sie alles, was es für die Funktionsweise der Modellbindung gibt. Wenn dies nicht der Fall ist, zeigt Ihnen FireBug die Anfrage an und Sie werden sofort wissen, warum eine Eigenschaft nicht gebunden wurde: entweder weil sie in der Anfrage fehlt, einen ungültigen Namen oder ein ungültiges Format hat. –

+0

Ich denke, was ich vermisse ist die Sammlung und Listen und was mit neuen Sachen zu tun. Die Samples, die ich bis jetzt benutzt habe, fügen Zeilen mit zufälliger ID zum Grid hinzu, und in meinem Code gibt es keine Grenzen. Ich habe ein Beispiel gesehen, das versucht, die Nummer zu ändern, aber das Originalbeispiel (Steve Sandersen) funktioniert ohne ... .. – Dani

23

Obwohl @russ's answer ist nützlich und wird manchmal notwendig sein, scheinen beide Optionen ein wenig niedrigen Pegel, wenn die Hauptfrage mehr über das große Bild ist. Daher würde ich Glimpse empfehlen.

Von seiner Seite über:

& hellip; Mit Glimpse können Sie Ihre Website oder Ihren Webservice direkt im Browser debuggen. Glimpse ermöglicht es Ihnen, zu sehen, was in Ihrem Webserver vor sich geht. Mit anderen Worten, was Firebug ist, Ihren clientseitigen Code zu debuggen, ist Glimpse, Ihren Server innerhalb des Clients zu debuggen.

Und da Sie speziell über Datenbindung gefragt haben, sollten Sie sich die binding tab documentation ansehen.Sie werden in der Lage sein, wieder zu sehen, aus der Dokumentation:

  1. Ordinal: Reihenfolge, in der die MVC Modell Bindung Infrastruktur, um die verfügbaren Daten
  2. Modell Binder zu binden versucht: Modell Binder, die verwendet wurde in einem bestimmten Szenario
  3. Property/Parameter: Name der Sache, dass der Binder
  4. Typen zu binden versucht: Art der Sache, dass der Binder war Versuch
  5. Versuchte Wert Provider zu binden: Anbieter, die die Binder zu verwenden versucht, einen bestimmten Wert zu erhalten (und ob es erfolgreich war)
  6. Versuchte Wert: Der tatsächliche Wert, dass der Anbieter, mit arbeiten (Post Art Konversation, etc.)
  7. Kultur: die Kultur, die verwendet wurde den Rohwert Rohwert zu analysieren: der Rohwert, dass der Anbieter hat mit (pre-Typ Gespräch zu arbeiten, etc.)

Siehe quick start. Kurz:

  1. Installieren Sie das Paket glimpse.mvc3
  2. Zum http://yourhost/yourapp/Glimpse.axd und "Einschalten".
  3. Klicken Sie auf das Symbol Blick auf der rechten unteren Ecke von jeder Ansicht in Ihrer App für weitere Einzelheiten.
+0

Sehr nützliche Antwort, danke! – nrodic

Verwandte Themen