Asp.net mvc 4 自定义控制器Umbraco

Asp.net mvc 4 自定义控制器Umbraco,asp.net-mvc-4,umbraco,umbraco7,Asp.net Mvc 4,Umbraco,Umbraco7,我刚开始学习Umbraco,我开始了一个小项目只是为了学习Umbraco。我在创建自定义控制器时遇到问题。我的页面上有一个链接供用户浏览所有产品: @Html.ActionLink("View more", "Index", "Product", null, new { title = "Browse all Products" }) 控制器 using System; using System.Collections.Generic; using System.Linq; using Sys

我刚开始学习Umbraco,我开始了一个小项目只是为了学习Umbraco。我在创建自定义控制器时遇到问题。我的页面上有一个链接供用户浏览所有产品:

@Html.ActionLink("View more", "Index", "Product", null, new { title = "Browse all Products" })
控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;

namespace Test.Controllers
{
    public class ProductController : Umbraco.Web.Mvc.RenderMvcController
    {
        public override ActionResult Index(RenderModel model)
        {
            return View("Products");
        }
    }
}
由于某些原因,网页显示了一个带有空白href的链接

<a href="" title="Browse all Products">View more</a>

您不必继承自
SurfaceControl
,因为它们通常用于呈现MVC子操作和处理表单数据提交。在您的情况下,从
Umbraco.Web.Mvc.RenderMvcController
继承的控制器就足够了

首先检查Umbraco的“设置”部分,确保存在名为
Product
的文档类型。Umbraco遵循此路由约定,因此
Product
类型的所有页面都将路由到您的
ProductController
。此路由约定还可能有助于
HtmlHelper
正确构建操作链接

根据调查,测绘工作如下:

  • 文档类型名称=控制器名称
  • 模板名称=操作名称
  • 如果没有匹配或未指定任何操作,则将执行“索引”操作
最后,确保控制器操作返回模板视图。例如,如果使用默认的
RenderModel
类型,只需返回文档类型的模板视图:

public override ActionResult Index(RenderModel model)
{
    return base.Index(model);
}

根据需要,您的控制器必须从Umbraco.Web.Mvc.SurfaceController继承,以便提取路线。这是你的选择吗?嗨,我把它改为从SurfaceController继承。但现在,当我尝试运行时,出现错误HTTP 404,资源未在/umbraco/Surface中找到,因为我的所有视图都存储在视图文件夹中。不确定如何将其更改为在视图文件夹中查找视图。您好,我按照您的说明进行了操作,现在遇到错误:系统。异常:未找到模板产品的物理模板文件我已在backoffice Umbraco中签入,我看不到任何与之相关的内容。您的文档类型是否有名为“产品”的模板?另外,您能否在项目的
视图
文件夹中看到名为“Product.cshtml”的文件?