2012-01-06 3 views
3

私はデータアノテーションで修飾したプロパティを持つモデルがいくつかあります。データアノテーションはビューモデルでは機能しません

public class OrderViewModel 
{ 
    public BillingModel Billing { get; set; } 
    public CustomerModel Customer { get; set; } 
} 

彼らは次のように出てレンダリング:

@Html.TextBoxFor(x => x.Business.FirstName) 
@Html.TextBoxFor(x => x.Business.LastName) 

<input id="Business_FirstName" name="Business.FirstName" type="text" value="" /> 

<input id="Business_LastName" name="Business.LastName" type="text" value="" /> 

私のカミソリは、このようになります私はこのようなビューモデルに入れ

public class BillingModel 
{ 
    [Required, 
    DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [Required, 
    DisplayName("Last Name")] 
    public string LastName { get; set; } 
} 

public class CustomerModel 
{ 
    [Required, 
    DisplayName("Address")] 
    public string Adress { get; set; } 

    [Required, 
    DisplayName("City")] 
    public string City { get; set; } 
} 

私は、それぞれのクラスには特定のメソッドが含まれているので、それぞれのクラスに生きています。ビューモデルの各プロパティに[Required]を入力しても、それでも機能しません。

答えて

6

(あなたはすべてのビュー間でのクライアント側の検証を使用する場合は、好ましく_layout.cshtmlビュー)あなたは、あなたのビューで、次の<script />の要素を配置する必要があります。

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

に応じてパスを変更します。しかし、それはあなたの検証を実行する必要があります。

また、ValidationMessageFor()をご使用ください。これと同じように:

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

これが有効です:ただ、他の回答に加えて、この遭遇他の誰のための

@Html.TextBoxFor(x => x.Business.FirstName) 
@Html.ValidationMessageFor(x => x.Business.FirstName) 

@Html.TextBoxFor(x => x.Business.LastName) 
@Html.ValidationMessageFor(x => x.Business.LastName) 
+0

私の問題は、これらのオブジェクトがメタデータを作成したエンティティフレームワークオブジェクトであるが、部分クラスを間違った名前空間に配置したことでした。 –

4

、あなたはまた、次のweb.configの設定が有効になっている必要がありますデータ注釈はレンダリングされたhtmlに影響を与えます。

+0

この回答は、受け入れられた回答と同じくらい重要なので、正しく動作するためには、Web設定でJSとこれらの設定の両方が必要です。 –

関連する問題