在Umbraco中创建一个指向SurfaceController的链接

时间:2014-09-12 06:35:39

标签: hyperlink action umbraco surface-controller

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

我有一个自定义曲面控制器myProject.Controllers.CompanySurfaceController,其中包含getCompanyList()getCompany(int companyId)功能。

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

除了一件事之外,一切正常:我无法掌握如何创建控制器子操作的<a>链接!在POST和使用Html.Action时,我在部分视图中包含子操作没有问题。

我已经尝试了@Html.ActionLink和其他助手,但我最接近的是/umbraco/Surface/CompanySurface/Company的链接,当然不起作用且不包含id参数(例如{{ 1}})。

我还试图将控制器放在Company/3名称空间中而没有运气(似乎没有必要)。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

首先,我想知道为什么不通过为公司提供自己的文档类型来将公司作为节点放在内容树中。这将生成非常简单的代码:

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

如果上面的appo不是一个选项,你需要从外部(非umbraco)表中提取数据,那么就做你正在做的事情。除此之外,您无法为子操作创建<a>!这不是umbraco禁止的,这是ASP.Net MVC保护,因此用户不能“入侵”你的孩子行为。 你真正想要使用的是RenderMvcController (see documentation)。还有另一个问题涉及difference between RenderMvcController and SurfaceController

答案 1 :(得分:0)

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

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

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