0

これは、asp.net mvc3 プロジェクト用です。2 つのビューと、それぞれに対応するビューモデルがあります。

Home.aspx にはビューモデル HomeVM があります

HomeChild.aspx には、HomeChildVM としてのビューモデルがあります。

現在、HomeChildVM は HomeVM から派生しており、独自のビューで使用されるいくつかのプロパティがあります。コントローラーには、Home ビューを返す 1 つのアクション メソッドと、HomeChild ビューを返す別のアクション メソッドがあります。これらのアクション メソッドは両方とも、型を HomeVM として返す 1 つのビジネス メソッドを呼び出します。次に、アクション メソッドは同じものを aspx ビューに返します。

return View(objHomeVM);

ここで、別のビジネス メソッドを記述し、別のビューモデル タイプ、つまり HomeChildVM を返すためだけにすべてのコードを最初からやり直す代わりに、次のように objHomeVM のプロパティを 1 つずつ objHomeChildVM に割り当てています。

 objHomeChildVM.prop1 = objHomeVM.prop1;
 objHomeChildVM.prop2 = objHomeVM.prop2;

そしてそれを返します:

 return View(objHomeChildVM);

プロパティを 1 つずつ割り当てるよりも、これを行うためのより良い方法はありますか? これが唯一の方法でない限り、これはあまりにも原始的な方法だと思います。

HomeChild.aspx には現在、このページ ディレクティブがあります。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<HomeChildVM>" %>

それを HomeVM に変更すると、HomeChildVM が持つ、HomeChild.aspx ページにのみ固有の追加のプロパティを使用できなくなります。

これについて何か考えはありますか?

御時間ありがとうございます...

4

2 に答える 2

0

ビューモデルに関するメモです。一部のプロパティは両方で使用されますが、両方のビューのビュー モデルを作成します。HomeVM のプロパティの 1 つを削除する必要がある場合、どうしますか? その後、HomeChildVM はバラバラになります。

プロパティを 1 つずつ割り当てるという質問に戻ります。 Auto Mapperをご覧になることをお勧めします。オブジェクト間のプロパティのマッピングを処理します。

更新しました

型と AutoMapper への参照を取得したら、2 つの型のマップを作成できます。

Mapper.CreateMap<Customer, CustomerDto>();  // Create the map

左側のタイプがソース タイプで、右側のタイプが宛先タイプです。マッピングを実行するには、Map メソッドを使用します。

CustomerDto dto = Mapper.Map<Customer, CustomerDto>(customer);

2 つのオブジェクト間でマッピングするために記述/使用できるサンプル コードを次に示します。

public static Customer Map(CustomerEntity entity)
{
     return new Customer
     {
          CustomerId = entity.CustomerId,
          Company = entity.CompanyName,
          City = entity.City,
          Country = entity.Country
     };
}

そして、それを使用すると、次のようになります。

Mapper.Map(customer);
于 2012-04-09T13:59:55.873 に答える
0

必要な ViewModel をビジネス メソッドの外部で作成し、その ViewModel の参照をビジネス メソッドに HomeVM のタイプとして渡してデータを入力することを検討しましたか? すなわち:

public ActionResult HomeAction()
{
   HomeVM objHomeVM = new HomeVM();

   BusinessMethod(objHomeVM);

   return View(objHomeVM);
}

public ActionResult HomeChildAction()
{
   HomeChildVM objHomeChildVM = new HomeChildVM();

   BusinessMethod(objHomeChildVM);

   return View(objHomeChildVM);
}

private void BusinessMethod(HomeVM objHomeVM)
{
   ...
   objHomeVM.prop1 = prop1;
   objHomeVM.prop2 = prop1;
   ...
}

ViewModel は単なる通常のオブジェクトであることを忘れないでください。それらの唯一の特別な点は、ViewModel と呼ばれることです。

于 2012-04-09T14:03:13.797 に答える