创建自定义控制器并查看错误“未找到页面,没有umbraco文档与url'/ home2 / index'匹配。”

时间:2014-09-11 04:26:45

标签: umbraco umbraco7

我是Umbraco的新手,正在做一些测试/学习工作。

我创建了一个名为Home2的新控制器,请注意我没有Home2的文档类型。我想创建可以与Umbraco一起使用的非Umbraco视图/页面。在跑步时我得到以下错误:

enter image description here

下面是我的Controller和视图代码,请指导我应该做些什么来创建可以与Umbraco一起使用的自定义控制器和视图?即使是非Umbraco类型,我还需要创建文档类型吗?

控制器:

命名空间Web.Controllers {     public class Home2Controller:Umbraco.Web.Mvc.RenderMvcController     {         //         // GET:/ Home /

    public override ActionResult Index(RenderModel model)
    {
        //Do some stuff here, then return the base method
        return base.Index(model);
    }

}

}

查看:

@ {     ViewBag.Title ="索引&#34 ;; }

索引

您好,欢迎来到我们的页面....

由于

3 个答案:

答案 0 :(得分:6)

许多人对umbraco的路由感到困惑,这是一个常见的问题。看看我的最新答案:Can I change URL of content?

首先,您需要在应用启动时注册您的路线。创建一个继承自Umbraco.Core.ApplicationEventHandler的新类。然后覆盖ApplicationStarted以添加规则。像这样:

protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
    //Custom route
    RouteTable.Routes.MapRoute(
    "SomeName",
    "Something/{action}/{id}",
    new
    {
        controller = "MyController",
        action = "Index",
        id = UrlParameter.Optional
    });
}

然后创建一个继承自RenderMvcController的控制器(不是表面控制器。表面和渲染控制器用于两种不同的东西):http://our.umbraco.org/documentation/reference/Templating/Mvc/surface-controllers

public class MyController : Umbraco.Web.Mvc.RenderMvcController
{
    public override ActionResult Index(RenderModel model)
    {
        //Do your db stuff here...
        return PartialView("~/Views/Partials/MyView.cshtml", model);
    }
}

答案 1 :(得分:2)

如果要创建未在Umbraco中处理的自定义页面,则需要将其添加到web.config中的umbracoReservedUrls列表中,例如

<add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/Home2/Index" />

答案 2 :(得分:0)

Umbraco负责所有路由,因此您的页面必须存在于后台的内容部分,即使它不是umbraco相关的。因此,您首先创建一个文档类型,然后创建一个模板。完成后,您可以在内容部分添加页面。

然后,您可以查看该页面(转到内容页面的属性,然后单击链接到文档)。此时,您可以根据需要添加自定义控制器,它应该来自RenderMvcController或SurfaceController(如果您确实形成帖子)