Mvc4 RTM Error Validation

Something has changed with the rtm bits regarding model validation.

I have a simple viewmodel that looks like

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

(I just added DataMember (IsRequired = true), because the error message I get says to use it to fix the problem. However, no joy)

In my controller, the state of the model tells me that the model is valid, however, when I try to transfer the model to api using RestSharp, I get the following error.

{"Message": "An error occurred.", "ExceptionMessage": "The" ProductTypeId "property in the type" Mine.Model.Model "is not valid. Values ​​with the type marked as [Required] must also be marked with [DataMember (IsRequired = true)] for recognition as needed. Consider the ad type attribute using [DataContract] and the property using [DataMember (IsRequired = true)]. ", ExceptionType": "System.InvalidOperationException", "StackTrace": "in System .Web.Http.Validation.Validators.ErrorModelValidator.Validate (ModelMetadata metadata, object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate (ModelMetadata, ValationContext object metadata \ ValidationContext) Sys tem.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (metadata ModelMetadata, ValidationContext validationContext, object container) \ r \ n a System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (metadata ModelMetadata, ValidationContext validatio nContext) \ r \ n a System.Web.Http.Validation. DefaultBodyModelValidator.ValidateNodeAndChildren (metadata ModelMetadata, validation ValidationContextContext, container of object) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.Validate System.Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36ValidateNodeAndChildren (metadata of ModelMetadata, ValidationContext validationContext, container of an object) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (metadata of ModelMetadata, ValidationContext validatio nCaldef.nodevalid.CodeVodeVeb.Default.CodeVodeVeb.Default.Context.Code.Validation.Code.Validation.Connection.Context ValidateNodeAndChildren (ModelMetadata metadata, ValidationContextContext validation, object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.Validate (object model, type type, ModelMetadataProvider metadataProvider, \ StringPrection Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36ValidateNodeAndChildren (metadata of ModelMetadata, ValidationContext validationContext, container of an object) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (metadata of ModelMetadata, ValidationContext validatio nCaldef.nodevalid.CodeVodeVeb.Default.CodeVodeVeb.Default.Context.Code.Validation.Code.Validation.Connection.Context ValidateNodeAndChildren (ModelMetadata metadata, ValidationContextContext validation, object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.Validate (object model, type type, ModelMetadataProvider metadataProvider, \ StringPrection Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (metadata ModelMetadata, ValidationContext validatio nContext) \ r \ n in System.Web.Http.ValidationContextModelVonidalonataCode ModelValidatonadaladatandaladalndalndalndalndalndalndalndalndatandal object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.Validate (object model, type type, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n in System.Web.HttpModeForm.Mode. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (metadata ModelMetadata, ValidationContext validatio nContext) \ r \ n in System.Web.Http.ValidationContextModelVonidalonataCode ModelValidatonadaladatandaladalndalndalndalndalndalndalndalndatandal object container) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.Validate (object model, type type, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n in System.Web.HttpModeForm.Mode. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36ValidationContext validatio nContext) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (metadata ModelMetadata, validation ValidationContextContext, object container) \ r \ n in System.Web.Http.Valid.Valid.Valid type type, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n in System.Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36ValidationContext validatio nContext) \ r \ n in System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (metadata ModelMetadata, validation ValidationContextContext, object container) \ r \ n in System.Web.Http.Valid.Valid.Valid type type, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n in System.Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n in System.Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass36ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n in System.Web.Http.ModelBinding.FormatterParameterBinding. <> c_DisplayClass1.b_0 (Object Model) \ r \ n in System.Threading.Tasks.TaskHelpersExtensions. <> c__DisplayClass361.<>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 cancelationToken) "}

I did not have this problem with rc bits, but then I just started using the restsharp library with rtm bits.

Any help would be great.

+5
source share
2 answers

In addition to adding to the [DataMember (IsRequired = true)] property, you also need to make sure that the [DataContract] attribute is applied at the class level.

+3
source

DataContract , . , , [DataMember (IsRequired = true)] Required (ErrorMessage = @))], ?

, . ?

0

All Articles