Mvc4 RTM验证抛出错误



关于模型验证的rtm位发生了变化。

我有一个简单的视图模型,看起来像

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

(我刚刚添加了DataMember(IsRequired=true),因为我收到的错误消息说要使用它来解决问题。然而没有乐趣)

在我的控制器中,模型状态告诉我模型是有效的,但是当我尝试使用RestSharp将模型传递到我的api时,我会得到以下错误。

{"Message":"发生错误。","ExceptionMessage":类型"Mine.Model.Model"的属性"ProductTypeId"无效。标记为[必需]的值类型属性也必须标记为[DataMember(IsRequired=true)]才能被识别为必需属性。请考虑将声明类型归因于[DataContract],将属性归因于[DDataMember(伊斯必需=true)]。","ExceptionType":"System.InvalidOperationException","StackTrace":"位于System.Web.Http.Validation.Validator.ErrorModelValidator.Valide(ModelMetadata元数据,对象容器)\r\n位于System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(Model元数据,ValidationContext ValidationContext,对象容器System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren上的System.Web.Http.Falidation.DDefaultBodyModelVerificationr.ValidateProperties(ModelMetadata元数据,ValidationContext ValidationContext)\r\n(ModelMetadata元数据,ValidationContext ValidationContext,对象容器)\r\n位于System.Web.Http.Validation.DefaultBodyModelValidator.Valide(对象模型,类型,ModelMetadataProvider元数据提供程序,HttpActionContext actionContext,String keyPrefix)\r\n位于Web.Http.ModelBinding.FormaterParameterBinding。<>c_DisplayClass1.b_0(对象模型)\r\n位于System.Threading.Tasks.TaskHelpersExtensions。<>c__DisplayClass36 1.<>c__DisplayClass38.<Then>b__35()rn at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass49.<ToAsyncVoidTask>b__48()rn at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1功能,CancellationToken CancellationToken)"}

我对rc位没有这个问题,但后来我才开始使用带有rtm位的restsharp库。

任何帮助都会很棒。

除了将[DataMember(IsRequired=true)]添加到属性之外,还需要确保在类级别应用属性[DataContract]。

UI使用数据条目DataContract来创建数据条目表单,并在表单发布时使用后端。那么,可以肯定地说,后端需要[DataMember(IsRequired=true)],表单验证需要[Required(ErrorMessage=@"Product type is Required)],这样您就可以访问错误消息了吗?

我不知道为什么我们必须同时做这两件事。为什么我们不能有一个单一的属性供前端和服务器端使用?

相关内容

最新更新