1

私は Umbraco を初めて使用するので、Umbraco が持っていると思われるルーティング メカニズムをよく理解していません。

関数と関数を備えたカスタム サーフェス コントローラーmyProject.Controllers.CompanySurfaceControllerがあります。getCompanyList()getCompany(int companyId)

<a>基本的な考え方は、データベースから会社のリストを取得し、関数への従来のリンクを使用して部分ビューをレンダリングし、データベースgetCompany(..)からその会社を取得/表示することです。

<a>コントローラーの子アクションへのリンクを作成する方法がわかりません! POSTしてHtml.Actionを使用するときに、部分ビューに子アクションを含めることに問題はありません。

私は他のヘルパーを試し@Html.ActionLinkましたが、最も近いのは へのリンクです/umbraco/Surface/CompanySurface/Company。これはもちろん機能せず、idパラメーターが含まれていません(例:Company/3)。

また、コントローラーをumbraco/Surface名前空間に配置しようとしましたが、うまくいきませんでした (必要ではないようです)。

ここで何が欠けていますか?

4

2 に答える 2

1

まず第一に、会社に独自のドキュメント タイプを与えて、会社をコンテンツ ツリーのノードとして配置しないのはなぜだろうかと思います。これにより、次のような非常に単純なコードが生成されます。

@foreach(var company in Model.Children) 
{
  <a href="@company.Url">@company.Name</a>
}

上記のアプローチがオプションではなく、外部 (非 umbraco) テーブルからデータを引き出す必要がある場合は、実行していることを実行してください。<a>ただし、 to a child アクションを作成することはできません! これは umbraco が禁止しているものではありません。これは ASP.Net MVC 保護であるため、ユーザーは子アクションに「ハッキング」できません。本当に使いたいのはRenderMvcController (ドキュメントを参照)です。RenderMvcController と SurfaceController の違いを掘り下げる別の質問があります。

于 2014-09-14T16:27:46.193 に答える
0

代わりに、GET パラメーターを実行する古典的な方法を使用することになりました。DB からすべての会社を取得し、すべてを 1 つのコントローラー (EditCompany など) で処理するため、機能します。それから私は渡すことができます/EditCompany?companyId=xx

きれいではありませんが、安全なページにのみ必要なので、今のところ SEO について心配する必要はありません。

これをカスタム コントローラーで機能させる必要がある場合は、代わりに Umbraco にカスタム IContentFinder を実装する必要があります。

于 2014-11-19T22:24:31.050 に答える