0

Orchardドキュメントのチュートリアルに従って、ユーザーコンテンツタイプにカスタムコンテンツパーツを追加するのに忙しいです。ドロップダウンに使用されるリストを次のように宣言するビューモデルを使用します。

public IEnumerable<SubscriptionPackageRecord> Packages { get; set; }
...
Packages = _userSubscriptionService.GetPackages() 

はどこGetPackagesですかIEnumerable<SubscriptionPackageRecord> GetPackages()。次に、エディターテンプレートで、やや不格好なコードを使用してドロップダウンにデータを入力します。

@Html.DropDownListFor(model => model.PackageId,
                  Model.Packages.Select(s => new SelectListItem {
                      Selected = s.Id == Model.PackageId,
                      Text = s.Name,
                      Value = s.Id
                  }),
                  "Choose a package...")

モデルのPackagesプロパティをSelectList型で宣言し、への単純な1行の呼び出しを使用することをお勧めしますが、DropDownListForビジネスレイヤークラスに近いコンテンツパーツドライバーで選択リストを作成する練習の良さには疑問があります。ドライバークラスにインポートし、そこでオブジェクトSystem.Web.Mvcを作成して割り当てるのは悪い習慣ですか?SelectList

4

2 に答える 2

0

部品はすでに Orchard に関連付けられているため、純粋なビジネス オブジェクトを維持する限り、これ以上依存することはないと思います。うまくいかない場合は、このビュー用に別のモデルを使用することをお勧めします。

于 2012-12-06T16:05:11.503 に答える
0

SelectListItem は純粋に UI 関連のエンティティであるため、ビューで作成することは正しいことです。ここでは、パッケージのビュー モデルを、DropDownListFor メソッドが必要とするオブジェクトに変換しています。

SelectListItems の作成をドライバーに移動することは、ビュー ロジックをコントローラーに移動することと同じです。これにより、ドライバーはどのようにレンダリングされるかを推測できます。その形状をオーバーライドして、HTML 以外のテクノロジやスクリプト ベースの UI 要素を使用するとどうなるでしょうか。そのリストの表現が複数ある場合はどうなりますか?

于 2012-12-06T18:18:55.563 に答える