データアクセスにWCFサービスを使用するMVC3アプリケーションがあります。 WCFサービスは、EF4.1をデータアクセスに使用します。MVC3アプリケーションでWCFサービスから受信した検証例外を表示する方法
MVC3アプリケーションとWCFサービスの間の依存関係を最小限にしたいので、ライブラリを共有しません。 MVC3アプリの唯一の依存関係はサービス参照です。
[OperationContract]
[FaultContract(typeof(EntityFault))]
void AddAddressEntity(Address entity);
EntityFaultは、以下のように定義されています:
は、私は以下のように定義FaultContractを生成するために、WCFサービスに操作コントラクトを定義し、保存上のエンティティを検証するために
[DataContract(IsReference=true)]
public class EntityFault
{
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public virtual ICollection<ValidationErrorMessage> ValidationErrorMessages
{ get; set; }
}
とValidationErrorMessageは簡単ですPropertyNameとValidationMessageの2つのプロパティを持つクラス
私はDbEntityValidationExceptionを以下のようにトラップします。
try
{ //....
db.SaveChanges();
}
catch (DbEntityValidationException ex)
{
EntityFault ef = EntityFaultHelper.CreateValidationFault(ex, entity);
throw new FaultException<EntityFault>(ef, ef.ErrorMessage);
}
私のMCV3アプリケーションでは、私はフォルト例外を傍受します。しかし、どのように私はどちらか
@Html.ValidationMessageFor(<my specific field>)
または
@Html.ValidationSummary(...)
セクションの中でエラーメッセージを表示することができますか?
モデルフィールドに注釈が付けられている場合、またはクライアントエンティティがIValidatableObjectを実装している場合は、指定された領域にエラーmsgが表示されます。
ViewBagを使用し、WCFのFaultContractから受信したエラーmsgの表示プレースホルダを定義し、受信したエラーmsgに対応するViewPagダイナミックプロパティを設定することを考えてください。
しかし、もっと良いアプローチがあるのだろうかと思います。私はコントローラに続い
<div class="editor-label">
@Html.LabelFor(model => model.State)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.State)
@ViewBag.StateError
</div>
:
おかげ