1

私はMVCパターンの使用に比較的慣れていません。これが私の最初のSOの質問です。私は特に ASP.NET MVC 3 を使用していますが、私の質問は一般的な MVC パターンに当てはまる可能性があります。基本的に同じビューを返すが、データベースからクエリされた結果セットが異なる可能性があるコントローラー メソッドを再利用する最善の方法は何ですか? たとえば、すべての顧客、特定の地域の一部の顧客、または「エリート」ステータスを持つ一部の顧客を表示したい場合があります。

現在、これらの「GetBy...」結果セットごとに個別のコントローラー メソッドがあります。「リスト」コントローラーを使用して、異なる結果セットを設定する方法はありますか? おそらく、結果セットをパラメーターとして挿入することによってですか?

4

1 に答える 1

2

これらのメソッドをサービスレイヤーに保持し、入力要件に基づいて呼び出します。アクションメソッドに渡されたパラメータを確認してください。

public ActionResult List(string regionName,string status)
{
  List<Customer> customerList=new List<Customer>();
  if((!String.IsNullOrEmpty(regionName)) && (!String.IsNullOrEmpty(status)))
  {
      customerList=CustomerService.GetCustomersForRegionStatus(regionName,status);
     //List all Customers  
  }
  else if(!String.IsNullOrEmpty(regionName))
  {
     customerList=CustomerService.GetCustomersForRegion(regionName);
  }
  else if(!String.IsNullOrEmpty(status))
  {
     customerList=CustomerService.GetCustomersForStatus(status);
  }
  else
  {
      customerList=CustomerService.GetAllCustomers();
  }
  return View(customerList);
}

そして、ビューはCustomerオブジェクトのコレクションにバインドされます

@model IList<Customer>
@foreach(var cust in Model)
{
  <p>@cust.Name</p>
}

GetCustomersForRegionStatusGetCustomersForRegionおよびメソッドGetAllCustomersが顧客オブジェクトのリストを返し、内部的に別のDBアクセスメソッドを呼び出して、渡されたパラメーターに基づいてフィルター処理されたデータを取得するとします。

これらのURLリクエストは、異なる結果をもたらすようになりました。

yourcontrollername/list
yourcontrollername/list?regionName=someregion
yourcontrollername/list?status=elite
yourcontrollername/list?regionName=someregion&status=elite
于 2012-08-02T21:28:08.823 に答える