2012-09-02 102 views
5

關於驗證模型,rtm位有所更改。Mvc4 RTM驗證拋出錯誤

我有一個簡單的視圖模型看起來像

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

(我剛剛添加的數據成員(IsRequired = true)從錯誤消息我得到說用它來解決這個問題。但是沒有快樂)

在我的控制器中,模型狀態告訴我模型是有效的,但是當我嘗試使用RestSharp將模型傳遞給我的api時,出現以下錯誤。

{「消息」:「發生錯誤」,「ExceptionMessage」:「屬性上型‘Mine.Model.Model’‘ProductTypeId’是無效值類型屬性標記爲[必需]必須。還可以用[DataMember(IsRequired = true)]標記爲需要識別的數據。考慮將聲明類型與[DataContract]以及屬性與[DataMember(IsRequired = true)]歸屬。「,」ExceptionType「:」System.InvalidOperationException 「,」StackTrace「:」at System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(ModelMetadata metadata,Object container)\ r \ n at System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata metadata,ValidationContext validationContext ,Object容器)\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata元數據,ValidationContext在System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata元數據,ValidationContext validationContext)\ r \ n \ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata元數據,ValidationContext validationContext ,Object容器)\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.Validate(Object model,Type type,ModelMetadataProvider metadataProvider,HttpActionContext actionContext,String keyPrefix)\ r \ n System.Web.Http.ModelBinding.FormatterParameterBinding 。 <> c_ DisplayClass1.b _0(Object model)\ 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](Func 1功能,的CancellationToken的CancellationToken)「}

我不是有這個問題與RC位,但後來我纔開始使用restsharp libary與RTM位。

任何幫助將是巨大的。

+0

我有完全相同的問題。 –

回答

3

除了添加[數據成員(IsRequired =真)]的財產,你還需要確保該屬性[DataContract]在類級別應用。

+0

我有一個單一的模型類,我的用戶界面MVC項目和WebApi項目都消耗。因此,添加[DataContract]不會導致任何問題? –

+0

我不這麼認爲DataContract影響序列化,而不是MVC模型綁定 – ShadowChaser

+0

添加DataContract讓我api中的控制器,但是所有的參數都沒有發送我需要添加其他東西? –

0

的數據錄入DataContr行爲正在被用戶界面使用,以在表單發佈時創建數據輸入表單和後端。因此,可以肯定地說後端需要[DataMember(IsRequired = true)],並且需要[需要(ErrorMessage = @「產品類型是必需的」)]以便表單驗證,因此您可以訪問錯誤消息?

我不知道爲什麼我們必須兩者都做。爲什麼我們不能有一個單一屬性的前端和服務器端使用?