2012-09-02 13 views
5

Hat sich etwas mit den rtm-Bits in Bezug auf die Validierung von Modellen geändert.Mvc4 RTM-Validierung verursacht einen Fehler

Ich habe ein einfaches Ansichtsmodell, das wie

public class ProductViewModel 
    { 
    [Required] 
    [DataMember(IsRequired = true)] 
    public int ProductTypeId { get; set; } 
    public string Product { get; set; } 
    } 

sieht (ich die Datamember (IsRequired = true) nur hinzugefügt, wie die Fehlermeldung, die ich so bekomme es zu verwenden, um das Problem zu beheben. Aber keine Freude)

Innerhalb meines Controllers sagt mir der Modellstatus, dass das Modell gültig ist, aber wenn ich versuche, das Modell mit RestSharp an meine API zu übergeben, erhalte ich den folgenden Fehler.

{ "message": "Ein Fehler ist aufgetreten", "ExceptionMessage": "Eigentum 'ProductTypeId' vom Typ 'Mine.Model.Model' ist ungültig Wert typisierte Eigenschaften wie [Erforderlich] gekennzeichneten Felder müssen. Sie müssen auch mit [DataMember (IsRequired = true)] gekennzeichnet sein, um als erforderlich erkannt zu werden. Erwägen Sie, den Deklarationstyp mit [DataContract] und die Eigenschaft mit [DataMember (IsRequired = true)] zu verknüpfen. "," ExceptionType ":" System.InvalidOperationException "," StackTrace ":" unter System.Web.Http.Validation.Validators.ErrorModelValidator.Validate (ModelMetadata-Metadaten, Object container) \ r \ n bei System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate (ModelMetadata-Metadaten, ValidationContext validationContext , Objektcontainer) \ r \ n at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (ModelMetadata-Metadaten, ValidationContext validationContext, Objektcontainer) \ r \ n at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (ModelMetadata-Metadaten, ValidationContext validationContext) \ r \ n at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (ModelMetadata-Metadaten, ValidationContext validationContext , Objektcontainer) \ r \ n at System.Web.Http.Validation.DefaultBodyModelValidator.Validate (Objektmodell, Typ Typ, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n bei System.Web.Http.ModelBinding.FormatterParameterBinding . <> c_ DisplayClass1.b _0 (Objektmodell) \ r \ n bei System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36 1.<>c__DisplayClass38.<Then>b__35()\r\n at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass49.<ToAsyncVoidTask>b__48()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1 func, CancellationToken CancellationToken) "}

ich mit den rc Bits dieses Problem war nicht mit, aber dann habe ich nur die restsharp libary mit den rtm Bits zu verwenden begonnen.

Jede mögliche Hilfe groß sein.

+0

ich habe genau das gleiche Problem. –

Antwort

3

Zusätzlich zum Hinzufügen [Datamember (IsRequired = true)] auf die Eigenschaft, müssen Sie auch sicherstellen, dass das Attribut [Datacontract] auf Klassenebene angewendet wird.

+0

I Habe eine einzelne Modellklasse, die sowohl mein UI-MVC-Projekt als auch das WebApi-Projekt verbraucht. Also fügt das Hinzufügen von [DataContract] keine Probleme zu? –

+0

Ich glaube nicht. DataContract beeinflusst die Serialisierung, nicht die MVC-Modellbindung. – ShadowChaser

+0

Hinzufügen von DataContract bringt mich dazu der Controller innerhalb der API wird jedoch nicht alle Parameter gesendet Ich muss etwas anderes hinzufügen? –

0

die Dateneingabe DatenContr act wird von der Benutzeroberfläche konsumiert, um das Dateneingabeformular und das Back-End zu erstellen, wenn das Formular veröffentlicht wird. Kann man also sicher sagen, dass [DataMember (IsRequired = true)] für das Backend benötigt wird und [Required (ErrorMessage = @ "Product type is required)] für die Formularvalidierung benötigt wird, damit Sie auf die Fehlermeldung zugreifen können?

ich bin nicht sicher, warum wir beide tun. Warum können wir nicht ein einziges Attribut von Front-End-und Server-Seite verwendet werden?

Verwandte Themen