5

モデルの検証に関する rtm ビットで何かが変更されました。

次のような単純なビューモデルがあります

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

(DataMember(IsRequired = true)を追加したところ、問題を解決するために使用するように指示されたエラーメッセージが表示されましたが、喜びはありません)

私のコントローラー内では、モデルの状態はモデルが有効であることを示していますが、RestSharp を使用してモデルを API に渡そうとすると、次のエラーが発生します。

{"メッセージ":"エラーが発生しました。","ExceptionMessage":"タイプ 'Mine.Model.Model' のプロパティ 'ProductTypeId' が無効です。[必須] とマークされている値型のプロパティも [DataMember] でマークする必要があります。 (IsRequired=true)] が必須として認識されるようにするには、[DataContract] で宣言型を、[DataMember(IsRequired=true)] でプロパティを属性付けすることを検討してください。","ExceptionType":"System.InvalidOperationException","StackTrace": " System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(ModelMetadata メタデータ、オブジェクト コンテナー) で\r\n System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata メタデータ、ValidationContext validationContext、オブジェクト コンテナー) で\r \n System.Web.Http.Validation.DefaultBodyModelValidator で。ValidateNodeAndChildren(ModelMetadata メタデータ、ValidationContext validationContext、オブジェクト コンテナー)\r\n System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata メタデータ、ValidationContext validationContext) で\r\n System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren で(ModelMetadata メタデータ、ValidationContext validationContext、オブジェクト コンテナー) \r\n System.Web.Http.Validation.DefaultBodyModelValidator.Validate で (オブジェクト モデル、型タイプ、ModelMetadataProvider metadataProvider、HttpActionContext actionContext、String keyPrefix)\r\n System.Web で.Http.ModelBinding.FormatterParameterBinding.<>c_ValidateProperties(ModelMetadata メタデータ、ValidationContext validationContext)\r\n System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren で (ModelMetadata メタデータ、ValidationContext validationContext、オブジェクト コンテナー)\r\n System.Web.Http.Validation.DefaultBodyModelValidator.Validate で(オブジェクト モデル、タイプ タイプ、ModelMetadataProvider metadataProvider、HttpActionContext actionContext、String keyPrefix) \r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.<>c_ValidateProperties(ModelMetadata メタデータ、ValidationContext validationContext)\r\n System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren で (ModelMetadata メタデータ、ValidationContext validationContext、オブジェクト コンテナー)\r\n System.Web.Http.Validation.DefaultBodyModelValidator.Validate で(オブジェクト モデル、タイプ タイプ、ModelMetadataProvider metadataProvider、HttpActionContext actionContext、String keyPrefix) \r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.<>c_HttpActionContext actionContext, String keyPrefix)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.<>c_HttpActionContext actionContext, String keyPrefix)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.<>c_DisplayClass1.b _0(オブジェクト モデル)\r\n at 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](Func1 func, CancellationToken cancelToken)"}

私はrcビットでこの問題を抱えていませんでしたが、rtmビットでrestsharpライブラリを使い始めたばかりです。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

3

プロパティに [DataMember(IsRequired = true)] を追加するだけでなく、属性 [DataContract] がクラス レベルで適用されていることを確認する必要もあります。

于 2012-09-04T22:59:33.380 に答える
0

データ入力 DataContract は、フォームがポストされるたびに、データ入力フォームとバックエンドを作成するために UI によって消費されています。では、エラー メッセージにアクセスできるように、[DataMember(IsRequired = true)] がバックエンドに必要であり、[Required(ErrorMessage = @"Product type is required)] がフォーム検証に必要であると言っても過言ではありませんか?

なぜ両方をしなければならないのかわかりません。フロントエンドとサーバー側で使用する属性を 1 つにできないのはなぜですか?

于 2012-09-04T23:14:27.560 に答える