2

ノックアウト.jsとMVC4で1ページのサイトを作りたいです。

いくつかの変更を行った後、ユーザーはコントローラーSaveアクションを対象とする保存ボタンをクリックします。
コントローラー側入力データを検証したい。
データが有効な場合 - WCF メソッドを呼び出す必要があります。
データが有効でない場合は、クライアント側に何かを返し、「名が長すぎます」などと伝えます。

次のようなものを作るのは簡単です:

  • SiteModelDataAnnotations で宣言する
  • コントローラーのアクションを宣言するpublic JsonResult Save(SiteModel data)
  • モデルが有効な場合は、WCF DataContract の新しいインスタンスを作成し、WCF メソッドを呼び出します

コード:

public JsonResult Save(SiteModel data)
{
    if (ModelState.IsValid)
    {
        var ui =  WcfUserInfo{FirstName = data.FirstName};
        if(wcfclient.wcfmethod(ui))
            return Json("IsValid");
    }
    return Json("IsNotValid");
}

DataAnnotations で DataContract を作成し、この DataContract をSaveメソッドで使用することは可能public JsonResult Save(WcfDataContract data)ですか?

同じデータを持つ 2 つの異なるクラス (1 つの MVC モデルと 1 つの WCF DataContract) を作成してサポートしたくないだけです。

ありがとうございました。

更新:
この 2 つの投稿は私の問題を解決します。
カスタム属性を持つオブジェクトを wcf サービス経由で送信
する WCF クライアントで WCF サービスと同じデータ型を使用する方法

4

2 に答える 2

3

これはあなたが聞きたいこと ではないことはわかっていますが、これを十分に強調することはできません:サービスとのデータ コントラクトとビュー モデル (JSON 表現) は同じであってはなりません。今はそうは感じていませんが、それらは別の懸念事項です。

それを考えると、それらが同じである(つまり、同じプロパティを持っている)場合、単に を に置き換えるのSiteModelを妨げているのは何ですか?WcfUserInfo

PS。AutoMapper を使用する場合、自分でマッピングを行う必要はありません。AutoMapper が 2 行のコードでそれを処理します。1 行はマップを構成し、もう 1 行はマッピングを実行します。

于 2013-09-17T16:45:36.373 に答える