2

私は、CMSを含むアプリケーションの開発を検討しています。私は熟練したWebフォーム開発者ですが、実際はMVCに移行しています。ASP.NET MVC - CMSの質問

私は君たちのいくつかに答えることを願っての質問のカップルがあります:

まず、私の現在のWebフォームをCMSは、ユーザーがページを作成することを可能にし、その上にユーザーコントロールの任意の数を「ドロップ」を彼らが作成したページ。私がこれを行う方法は、パスと一緒にDBにエントリを作成し、LoadControlメソッドを使用することです。

部分的なビューでこれを行うことができますが、部分的なビューにはコードがありません。人々がページにドロップする可能性のあるコントロールが100個ある可能性がある場合、ビュー内でViewBagを使用する場合、コントローラ内のViewBagは100個すべてのコントロールを処理する必要がありますか?たとえば、Webフォームユーザーコントロールにはロジックが含まれます:rptItems.DataSource = blah; rptItems.DataBind()

MVCでは、ロジックはビューコントローラにあり、ビューはViewBagによってアクセスされると仮定していますか?私は少しこれを行う方法で混乱しています。

第2に、ディープルーティングをどのように扱いますか?

EG:

ストア/製品/カテゴリーは結構ですが、何店舗/製品/カテゴリー/デリバリー/ UKの?私が必要とするルートごとにglobal.asaxでルートを設定する必要はありますか? Webフォームでは、ReWritePathメソッドを呼び出して、正規表現を使用してルーティングを自分で処理しました。これを読んで、そしてうまくいけば、あなたの2番目の質問、(すなわち、「深いルーティング」)のために、私の質問のいくつか

答えて

2

に答える時間のため

おかげで、あなたの代わりに、実際のルートを追加することで、あなたのコントローラ内でこれを処理することができます。 URLの各部分は、コントローラアクション内のRouteData.Valuesコレクションを介して利用できます。だから、あなたのルートが一般的なルート設定を想定し

~/Store/Products/Category/{*params} 

のように見えることがあり、これはその後、RouteData.ValuesコレクションからdeliveryukをGRAP可能性があり、~/areas/store/controllers/storeControllerCategory(...)アクションメソッドを呼び出します。

これには、データベースにルートを保存し、関連するメタデータを使用して正しいコントローラとメソッドを見つけるという、他の多くの方法がありますが、これは最も簡単だと思います。また、それは明白かもしれないが、あなたが本当にあなただけの例では「カテゴリー」を超えた2つのパラメータが必要な場合は、あなただけの

public ActionResult Category(string category, string region) 
{ 
... 
} 

を使用することができますし、ルート:

~/store/{controller}/{action}/{category}/{region}/{*params} 

DeliveryUKは次のようになりそれぞれカテゴリおよび領域パラメータにマッピングされる。 ukを超えるものは、引き続きRouteData.Valuesコレクションを介して利用できます。これは、より具体的なルートがないと仮定します。

~/store/{controller}/{action}/{category}/{region}/{foo}/{bar}/{long_url}/{etc} 

などが適しています。 ({* params}は2番目のルートと競合する可能性がありますので、問題があるかどうか調査する必要があります。あなたは動的ビューソースを生成し、ViewBag経由で多くのものを合格する必要がなくなり、コントローラから、それを文字列として返すことができ

:あなたの最初の質問の場合)

。 CMSデータベースの仮想ページに部分的なビューを含める必要がある場合は、ページを生成するときにこれらのコンポーネントへの参照を追加します。 (これはあなたの問題に対処するかもしれないし、そうでないかもしれない - より多くの情報を提供してください)

+0

ありがとうDavid。ルーティングの質問は、クライアントが好きなだけ多くのネストされたURLを作成できるようにするソリューションを見つけることでした。だから理論的にはDir1/Dir2/Dir3/Dir4 ....などがあります。ウェブフォームで。 Page.aspxファイルに各リクエストを送り、データベースのURLに基​​づいてパスを書き直します。 – Paul