2012-09-02 15 views
5

Ha cambiado algo con los bits de rtm con respecto a la validación de modelos.Mvc4 Validación de RTM lanzando un error

que tienen un modelo de vista simple que parece

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

(me acaba de agregar el DataMember (isRequired = true) como el mensaje de error que consigo dice utilizarlo para solucionar el problema. Sin embargo hay alegría)

Dentro de mi controlador, el estado del modelo me dice que el modelo es válido; sin embargo, cuando intento pasar el modelo a mi API usando RestSharp, aparece el siguiente error.

{ "mensaje": "Se ha producido un error", "ExceptionMessage": " 'ProductTypeId' Propiedad del tipo 'Mine.Model.Model' no es válido propiedades con tipo de valor marcados como [Obligatorio] debe. también se marcará con [DataMember (IsRequired = true)] para ser reconocido como requerido. Considere atribuir el tipo de declaración con [DataContract] y la propiedad con [DataMember (IsRequired = true)]. "," ExceptionType ":" System.InvalidOperationException "," StackTrace ":" en System.Web.Http.Validation.Validators.ErrorModelValidator.Validate (metadatos ModelMetadata, contenedor de objetos) \ r \ n en System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate (metadatos ModelMetadata, ValidationContext validationContext , Contenedor de objetos) \ r \ n en System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (metadatos de ModelMetadata, ValidationContext validationContext, Object container) \ r \ n en System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties (metadatos ModelMetadata, ValidationContext validationContext) \ r \ n en System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren (metadatos ModelMetadata, ValidationContext validationContext , Contenedor de objetos) \ r \ n en System.Web.Http.Validation.DefaultBodyModelValidator.Validate (Modelo de objeto, tipo de tipo, metadataProvider de ModelMetadataProvider, HttpActionContext actionContext, String keyPrefix) \ r \ n en System.Web.Http.ModelBinding.FormatterParameterBinding . <> c_ DisplayClass1.b _0 (Modelo de objeto) \ r \ n en 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) "}

yo no estaba teniendo este problema con los bits rc pero entonces sólo han comenzado a utilizar el libary restsharp con los bits RTM.

cualquier ayuda ser grande.

+0

estoy teniendo el mismo problema. –

Respuesta

3

Además de añadir [DataMember (isRequired = true)] a la propiedad, también tendrá que asegurarse de que el atributo [DataContract] se aplica a nivel de clase.

+0

I tener una única clase de modelo que consuman tanto mi proyecto UI mvc como el proyecto WebApi. ¿Entonces agregar [DataContract] no causará ningún problema? –

+0

No lo creo. DataContract afecta la serialización, no el enlace del modelo MVC. – ShadowChaser

+0

Agregar DataContract me permite el controlador dentro de la API, sin embargo, no se envían todos los parámetros. Necesito agregar algo más? –

0

la entrada de datos DataContr La interfaz de usuario consume la acción para crear el formulario de entrada de datos y el back-end siempre que se publique el formulario. Entonces, ¿es seguro decir que [DataMember (IsRequired = true)] es necesario para el back-end y [Required (ErrorMessage = @ "Product type is required)] es necesario para la validación del formulario para que pueda acceder al mensaje de error?

no estoy seguro de por qué tenemos que hacer las dos cosas. por qué no podemos tener un solo atributo para ser utilizado por front-end y del lado del servidor?

Cuestiones relacionadas