1

Ich habe folgendes ModellVerwenden von MVC Model Binder, wie verhindert werden, innere komplexe Objekteigenschaften zu binden?

public class Person 
{ 
    public int Id {get;set;} 
    [Required()] 
    public string Name {get;set;} 
    [Required()] 
    public Address Address {get;set;} 
} 

public class Address 
{ 
    public int Id {get;set;} 
    [Required()] 
    public string City {get;set;} 
    [Required()] 
    public string Street {get;set;} 
} 

in der Steuerung:

[HttpPost] 
     public ActionResult Create(Person entity) 
     { 
      if (ViewData.ModelState.IsValid) 
      { 
       ///Some code 
       return this.RedirectToAction("Browse"); 
      } 
      else 
      { 
       return View("Edit", ViewModel); 
      } 
     } 

das Problem ist, dass das Bindemittel auch die innere Adresse Klasse zu bestätigen versuchen, aber alles für mich mich, ist die AddressID aber der ModelBinder besteht darauf, sogar die Eigenschaften der Stadt und der Straße zu validieren.

Wie kann ich einfach den ursprünglichen ModelBinder überschreiben, nur um die ID des inneren Objekts zu validieren (was in meiner Situation AddressID ist)?

gibt es einen einfachen Weg?

Antwort

1

Es klingt wie Ihre Entität und Ihr Modell zwei unterschiedliche Anforderungen haben. Wenn das der Fall ist, sollten sie zwei verschiedene Klassen sein. Schreiben Sie eine separate Personen- und Adressklasse für MVC, an die keine Stadt oder Straße gebunden werden soll.

Eine andere, aber weniger elegante Lösung besteht darin, sich nicht darauf zu verlassen, dass MVC die Modellbindung übernimmt. Wenn Sie nur eine Handvoll Werte haben, die akzeptabel sind, aber wenn Sie viel haben, dann würde ich meinen ersten Vorschlag verwenden.

+0

Nun, vielleicht ist das Beispiel, das ich in der Frage schrieb, zu einfach, aber die Situation ist komplexer als das, sagen wir, ich habe ein Auftragsobjekt und einen Kunden, wenn ich die Bestellung speichern, die ganze Datenbank Pflege (um den Auftrag zu speichern) ist nur die CustomerID, nicht sein Name oder sein Kriegszustand. Wenn der Benutzer also eine Bestellung ausführt, wählt er einfach den Kunden aus, und wir nehmen einfach seine ID. deshalb möchte ich nicht, dass der mvc das gesamte kundenobjekt validiert. –

+1

In diesem Fall würde ich mit meinem ersten Vorschlag gehen, eine separate Klasse haben, an die MVC bindet, und dann Ihre Dateneinheiten eingeben, nachdem die gesamte Validierung durchgeführt wurde. –

+0

oder vielleicht kann ich die Art und Weise wie MVC-Modelle binden, und es nur die ID des komplexen Objekts binden ?? –

Verwandte Themen