1

このようなものがあるとしましょう

public class Person
{
   public string Name {get; set;}
   public Country Country {get; set;}
}

public class PersonViewModel
{
   public Person Person {get; set;}
   public SelectList Countries {get; set;}
}

オートマッパーを使用して、Person から PersonViewModel への解析を実行できますか?

4

3 に答える 3

3

これには AutoMapper を使用しないでください。その価値はありません。たとえば、検証に失敗してフォームを再度表示した場合、AutoMapper はここでは実行されません (通常)。通常、次の 2 つのルートを使用します。

  • リストがコンテキスト固有でない場合は、選択リスト項目の一部の ISelectListProvider を照会する HtmlHelper を作成します: Html.DropDownList()。選択した IoC コンテナーを使用して、personListProvider を見つけ、アイテムのリストを照会し、ドロップダウン リストに入力します。
  • リストがコンテキスト固有の場合は、コントローラー アクションでリストを構築するだけです。
于 2009-11-10T14:52:19.390 に答える
2

選択した場合は、次のようにすることができます。

public class Person
{
   public string Name {get; set;}
   public Country Country {get; set;}
   public Country[] GetCountries 
   {
    ... add method for countries here
   }
}

次に、ViewModelで、選択リストにそのコレクションからデータをプルさせることができます。

public class PersonViewModel
{
   public Person Person {get; set;}
   public Country[] Countries {get; set;}
   public SelectList Countries { get{ .. add new select list code here getting vals from Countries..}}
}

繰り返しますが、これは状況依存リスト用です。しかし、あなたはここで少し懸念を混乱させています(人は国のリストを取得する必要がありますか?)

于 2010-01-19T16:10:35.563 に答える
2

新しい (または更新された) Person オブジェクトを生成して返すために必要なすべてのボーナス情報を含む PersonViewModel を介してビューに Person を送信したいようです。

これが正しければ、オートマッパーはまったく必要ないと思います。automapper について私が理解していることから、関連するオブジェクトのコレクションをより多くのビュー モデル タイプの状態にマッピングするためのものですが、この場合、Person をクライアントに送信し、Person を受信しようとしています。この場合、ビュー モデルを使用してページにデータを入力する方が簡単に思えますが、代わりにページが Person を返すようにします (または、更新された Person をビュー モデルから抽出して、いくつかのキーストロークを節約します)。


編集: そうは言っても、オートマッパーを使用して情報を移動できるはずです。この簡単なシナリオでは不要なレイヤーです。

于 2009-11-09T17:16:22.993 に答える