2

私はASP.NETMVC2を使用しており、さまざまな領域にさまざまなコントローラーがあります。

これらの多くでは、データベースに含まれている値のリストから値を選択する必要があります。たとえば、製品や従業員を選択します。

私は現在、ドロップダウンリストなどで使用するためにこれらのリストを取得するための専用のコントローラーを用意することを考えています。このコントローラーは、DALにクエリを実行し、JSONオブジェクトを提供して、それらを必要とするビューでajax呼び出しをロードします。

これに関する私の唯一の懸念は、私の見解が異なるコントローラーから一度にデータを取得することになるということです。

私は心配する権利がありますか?これを設定するより良い方法はありますか?特にProduct/Employeeクラスを作成して、共有の強い型の部分ビューを作成することはできますか?

4

3 に答える 3

1

コントローラとデータアクセスコードの間の中間層として機能する別のクラスを作成します。これで、異なるコントローラーからこのクラスメソッドを呼び出すことができます。

public class ItemService()
{
 public static List<Items> GetItems()
 {
    var items=yourRepositary.GetItems();
    return items;
 }
}

今すぐ別のコントローラーから呼び出すことができます

public ActionResult GetItems()
{
  var items=ItemService.GetItems();
  return Json(items,JsonRequestBehavior.AllowGet);
}
于 2012-07-10T14:37:26.040 に答える
0

別のアプローチは、この共通の機能を実装する基本クラスのコントローラーを使用し、これから他の具象コントローラー(ビューとペアになっている)を継承することです。

このアプローチは、さまざまなリストが多数ある状況、または入力パラメーターに応じて動的にリストを作成する必要がある状況をサポートします。

ActionFilterAttributeアプローチは、静的リストが少なく、静的なリストが多い状況に適している場合があります。

于 2012-07-10T14:47:51.160 に答える
0

最善の解決策は、ビューにレンダリングする必要のあるデータをViewDataディクショナリに取り込むカスタムActionFilterAttributeを作成することです。次に、ViewDataDictionaryの拡張機能を作成して、ビューからタイプセーフな方法でこの情報にアクセスしたり、ViewDataにデータが含まれていない場合は例外をスローしたりできます(つまり、コントローラーメソッドの上にアクションフィルター属性を追加するように求められます)。継承を使用すると、さらに先の混乱に陥る可能性があります。

于 2012-07-10T14:52:36.893 に答える