1

由于我是 Umbraco 的新手,我还不太了解它似乎具有的路由机制。

我有一个myProject.Controllers.CompanySurfaceController带有getCompanyList()getCompany(int companyId)功能的自定义表面控制器。

<a>基本思想是从数据库中获取公司列表,使用经典链接呈现部分视图,getCompany(..)然后从数据库中检索/显示该公司。

一切正常,除了一件事:我无法掌握如何创建<a>到控制器子动作的链接!在发布和使用 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>一个子动作!这不是 umbraco 禁止的,这是 ASP.Net MVC 保护,因此用户不能“入侵”您的子操作。您真正想要使用的是RenderMvcController(请参阅文档)。还有另一个问题深入探讨了RenderMvcController 和 SurfaceController 之间的区别

于 2014-09-14T16:27:46.193 回答
0

我最终改用了经典的 GET 参数方法。它之所以有效,是因为我从数据库中获取所有公司并在一个控制器中处理所有内容(例如 EditCompany)。然后我可以通过/EditCompany?companyId=xx

它并不漂亮,但它只需要安全页面,所以我现在不担心 SEO。

如果我们真的需要使用自定义控制器进行这项工作,我们需要在 Umbraco 中实现自定义 IContentFinder。

于 2014-11-19T22:24:31.050 回答