2009-08-11 26 views
5

データアノテーション属性とxValへの参照でマークされた部分クラスを持つLinq-to-SQLのモデルクラスがあります。ASP.NET MVCモデル/ ViewModel検証

モデルに直接ビューをバインドすると、xValで生成されたJSとサーバー側の両方のチェックの両方がうまく機能します。

多くのビューは特定のモデルに入力されないため、ビューモデルクラスを設定しています。モデルインスタンス全体を公開するのではなく、モデルにプロパティを公開して、ビューで設定することを許可または必要とします。

このアプローチは、ビューモデルクラスを正しくポピュレートし、リポジトリはレコードを正しく読み込むことができます。

しかし、検証はまったく完了しません。私はクライアントコードを見て、検証配列はxvalでは空です。また、IsValidのサーバー側チェックは常にtrueです。

データアノテーションをこのような検証のためのビューモデルのプロパティから取得することはできますか、それとも別の方法で行う必要がありますか?

+0

あなたの質問に答えた場合は、これをマークしてください –

答えて

0

xvalヘルパーコードとHtml.Helpersを投稿できますか?

エンティティと接頭辞が必要です。そのため、ビューモデル内の構造によって違いが生じる理由はわかりません。ような何か:

<%= Html.ClientSideValidation<Foo>("Foo") %> 
<%= Html.ClientSideValidation<Bar>("Foo.Bar") %> 

ジェームズ

+0

私の前に正確なコードはありませんが、<%= Html.ClientSideValidation ()%>のようなものがあります。 です。サーバー側のIsValid呼び出しが正しく動作しないため、xvalの問題ではなく、間違いの可能性があります。 – blu

4

あなたはパーシャルを使用して、サブタイプに渡す場合、あなたはまだ修飾する必要があります。

<%@ Control Language="C#" 
        Inherits="System.Web.Mvc.ViewUserControl<MvcWeb.Models.OrderDetail>" %> 

<% using (Html.BeginForm()) { %> 

    <fieldset> 
     <legend>Fields</legend> 
      <%= Html.Hidden("OrderId", Model.OrderId) %> 
      <%= Html.Hidden("ProductId", Model.ProductId)%> 
     <p> 
      <label for="Quantity">Quantity:</label> 
      <%= Html.TextBox("OrderDetails.Quantity", Model.Quantity)%> 
      <%= Html.ValidationMessage("OrderDetails.Quantity", "*") %> 
     </p> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% } %> 

タイプがOrderDetailsであることに注意してください。ただし、確認メッセージを処理するためにプレフィックスを付けています。

+1

私はこの同じ問題を抱えていました。 – hminaya

0

これを正しく読んだら、linqからsqlクラスへDataAnnotationsを入れて、viewmodelプロパティにlinqからsqlクラスへのプロパティを取り込みます。

これをxvalで使用するには、ビューモデルのプロパティにDataAnnotationsを配置する必要があります。限り、私はxvalsコードからそれは誰の検証情報(誰かがここで間違っている私を修正してください)の公共のプロパティを超えて見てdosen'tから伝えることができます。

モデルとビューモデル間の検証を透過的にしたい場合は、postsharpを使用して属性をバインドするルートを下げることができますが、プログラムが小さい場合はほとんど利益を得ることができません。

関連する問題