1

これをどうやってやるのかよくわかりません。基本的に私はドメインを持っています、それを単にdomain.comと呼びます。ドメイン自体は企業のWebサイトであり、スラッシュパラメータを介してアクセスされるフランチャイジーのWebサイトがあります。したがって、たとえばdomain.com/atlはフランチャイジーのWebサイトである可能性があります。これらのフランチャイジーのWebサイトは企業のWebサイトと同じであるため、基本的には各フランチャイジーのサイト全体を再作成するだけです。

これが私にとって難しい部分です。フランチャイジーのウェブサイトの特定のページはカスタマイズ可能である必要があります。だから私の考えは、これはデータベースによって制御されるべきであり、データベースにヒットし、クリックされたリンクに基づいてページのコンテンツを返すパラメータとして「atl」をとるだけです。そうすれば、基本的に1つのビューファイルができます。無制限の数のフランチャイジーにサービスを提供します。

私が理解していないのは、このパラメーターをどのように渡すかです。たとえばリンク。domain.com/atlにアクセスし、「stuff」というリンクをクリックするとします。「スタッフ」ビューに移動し、domain.com / stuffではなくdomain.com/atl/stuffとして表示されるようにルーティングするには、どうしますか?

私の研究を容易にするこのシステムを説明する言葉はありますか?または、誰かが私を正しい方向に向けるリンクを持っていますか?ありがとう。

4

3 に答える 3

1

MikeSW はルートに近づいていますが、フランチャイジーのページが企業のページとコントローラーを共有することを望まないようです。他にもいくつか考えがあります。

routes.MapRoute(null, // do not name your routes, they are "magic strings"
    "{tenant}/{controller}/{action}",
    new
    { 
        // strongly type controller, action, and area names using T4MVC
        controller = MVC.Home.Name,            
        action = MVC.Home.ActionNames.Index,
        // it sounds here like you want this controller for franchisees only, 
        // so corporate pages will use other controllers. if this is the case, 
        // tenant="default" // require the parameter by not supplying a default
    });

ルートに名前を付けない理由は、ルートに名前を付けないと、一部の html ヘルパーおよびコントローラー メソッドで特定のオーバーロードを使用する必要があるためです。RedirectToRoute@Html.RouteLink、 などのメソッドのオーバーロードの多くは@Url.RouteUrl、最初の引数としてルート名を取ります。ルートから名前を省略することで、ルート パラメーターと HTTP メソッドのみに依存するオーバーロードを使用してコントローラーとアクションを解決する必要があります。( T4MVCは、これらのメソッドへの引数の領域、コントローラー、およびアクション名を厳密に型指定できるため、ここでも役立ちます。)

MVC は、ビューがレンダリングされる URL で「アンビエント」ルート パラメーターを自動的に使用します。そのため、URL にアクセスdomain.com/atlして にリンクしたい場合はdomain.com/atl/stuff、次のようなハイパーリンクを出力できます。

@Html.RouteLink("Stuff", new 
{
    // this will render a link with the URL domain.com/atl/stuff
    controller = MVC.Stuff.Name,
    action = MVC.Stuff.ActionNames.Index,
    // you do not need to include franchisee
})

<a>(通常の HTMLタグの href パラメーターの URL のみをレンダリングする場合は、@Url.RouteUrl代わりに使用してください。)

一方、あるフランチャイズ サイトから別のフランチャイズ サイトにリンクする場合は、フランチャイズ パラメーターを指定する必要があります。

@Html.RouteLink("Another franchisee in this state", new 
{
    // this will render a link with the URL domain.com/macon
    controller = MVC.Home.Name,
    action = MVC.Home.ActionNames.Index,
    franchisee = "macon"
})
于 2012-04-11T07:19:59.033 に答える
0

構造マップのようなIOCコンテナを使用してマルチテナントWebアプリケーションを実際に作成することで、別のアプローチをとることができます。 Zack Owensには、これを行う方法に関するスターターサンプルがあります

マルチテナントWebアプリを作成することは、明らかに投稿に入れることができる以上のものですが、さらに情報が必要な場合は、私にメッセージを送ることができます。

ルーティングですべてを処理しようとすると、混乱が生じると思います。

于 2012-04-11T06:02:53.560 に答える
0

ルートでは、ビューは重要ではなく、戻るビューを選択するときにコントローラーだけが重要になります。結局のところ、それはマルチテナンシーについてだと思います。少なくともこの場合、anwserは非常に単純です。テナント名またはIDを含むルート定義を用意する

routes.MapRoute("default","{tenant}/{controller}/{action}",new{ tenant="default", controller="home", action="index"})

このルートでは、テナントが指定されていない場合、「デフォルト」(おそらく企業サイト自体)であると見なされます。

カスタマイズ可能である必要があるいくつかのページについて、データベースは物事を保存するためのものであり、ロジックを制御するためのものではありません。私は、物事はあなたが想像するよりも単純だと思います。db(特定のビュー名またはCSS、js)にいくつかのカスタマイズの詳細を保存し、それらをビューにフィードする必要があります。基本的に、コントローラーはデータベースから必要な最小限の情報を取得し、関連するビューを選択してビューモデルを作成し、そのビューを返します。

于 2012-04-11T05:27:17.917 に答える