1

私は、ASP MVC 1.0 で処理する複雑な URL を持っていると思います。ほとんどのコントローラーでのすべてのアクションには、アカウントとプロジェクトの 2 つのパラメーターが常に必要です。これは、各アクションの要件の上にあります。これは、典型的な URL が次のようなものであることを意味します。

http://abcd.com/myaccount/projects/project_id/sites/edit/12

この例では: myaccountはアカウント名です。プロジェクトはコントローラーにすることができ、他のオプションは場所従業員などです。project_idはmyaccount内のプロジェクトの ID です。sitesはコントローラーである可能性があり、その他のオプションはstaffpaymentのようなものです。editはアクションで、12は編集されたサイトの ID です。(これが十分に明確であることを願っています)

1 つのオプションは、ルートを作成し、すべてのアクションに 2 つの追加パラメーターを追加して、コントローラーのすべてのアクションに project_id とアカウントを渡すことです。これは実際には望ましくありません。また、2 つのコントローラー (プロジェクトとサイト) がここで機能するかどうかもわかりません。

私の理想的な状況は、コントローラー アクションへの呼び出しと共に移動するある種のコンテキストを使用し、そこに project_id と myaccount を格納することです。残りのパラメーターは、次のような通常の方法で処理できます。

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

これがどのように/どこで起こるかについてのアイデアはありますか? また、これは ActionLink とどのように連携しますか (つまり、このコンテキストに基づいて正しいリンクを生成します)?

ありがとう!

4

2 に答える 2

1

まず、のようなルートにトークンを追加する必要があります{company}/projects/{project}{controller}/{action}/{id}。次に、独自のIControllerFactoryを作成した場合、コンストラクターを介してRouteDataからコントローラーに値をプッシュするのは非常に簡単です。おそらく、始めるのに最も簡単な方法は、DefaultControllerFactoryをサブクラス化し、CreateControllerメソッドをオーバーライドすることです。

于 2009-05-06T10:48:38.217 に答える
-1

これは私にはまったく意味がありません。次のようなルートがあるのはなぜですか。

{controller}/{id}/{controller}/{id}

?

于 2009-05-06T10:26:27.147 に答える