Hyperlink 在Umbraco中创建指向SurfaceController的链接

Hyperlink 在Umbraco中创建指向SurfaceController的链接,hyperlink,action,umbraco,surface-controller,Hyperlink,Action,Umbraco,Surface Controller,由于我是Umbraco的新手,我还不太了解它似乎具有的路由机制 我有一个自定义的surface控制器myProject.Controllers.CompanySurfaceController,带有getCompanyList()和getCompany(int companyId)函数 基本思想是从数据库中获取公司列表,使用指向getCompany(…)函数的经典链接呈现局部视图,并从数据库中检索/显示该公司 除了一件事之外,一切都很正常:我无法掌握如何创建指向控制器子操作的链接!在发布和使用H

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

我有一个自定义的surface控制器
myProject.Controllers.CompanySurfaceController
,带有
getCompanyList()
getCompany(int companyId)
函数

基本思想是从数据库中获取公司列表,使用指向
getCompany(…)
函数的经典
链接呈现局部视图,并从数据库中检索/显示该公司

除了一件事之外,一切都很正常:我无法掌握如何创建指向控制器子操作的
链接!在发布和使用Html.Action时,我可以在部分视图中包含子操作

我尝试过
@Html.ActionLink
和其他帮助程序,但最接近的是
/umbraco/Surface/CompanySurface/Company
的链接,它当然不起作用,并且不包括id参数(例如
Company/3

我还尝试将控制器放入
umbraco/Surface
名称空间,但运气不佳(而且似乎没有必要)


我在这里遗漏了什么?

首先,我想知道为什么不给公司一个自己的文档类型,将其作为内容树中的节点。这将产生如下非常简单的代码:

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

如果上述方法不是一个选项,并且您需要从外部(非umbraco)表中提取数据,则执行您正在执行的操作。除此之外,您不能创建
。还有一个问题是深入研究。我最终使用了执行GET参数的经典方法。
这是因为我从数据库获取所有公司,并在一个控制器(例如EditCompany)中处理所有事情。
然后我可以传递
/EditCompany?companyId=xx

这是不漂亮,但它是只需要安全的网页,所以我现在不担心搜索引擎优化


如果我们真的需要在自定义控制器上实现此功能,我们需要在Umbraco中实现自定义IContentFinder。

感谢您的帮助!我的应用程序最终可能会有数千家公司,因此每个公司都有一个节点是没有意义的,即使它会提供一个非常清晰的视图。我不理解你提到的“黑客”。MVC的标准路由是
{controller}/{action}/{id}
,这不是一个直接链接吗?我从相关问题中了解到,Umbraco只为内容节点(包括自定义控制器)提供路由,但如果
@html.action(“myaction”、“mycontroller”、params)
能够找到它的路径,为什么我不能链接到/mycontroller/myaction/param?我们真的需要为简单的非umb数据创建自定义路由代码或扩展吗?不,你不需要。您可以在视图中转储所有代码。