我试图添加一个新的MVC模板到我最近几个月开发的一个已有的站点。我有两个自定义控制器/模型设置,工作正常。今天我试图添加另一个新模板,但遇到了一个无法通过的错误。umbraco版本是7.04。
首先,错误:
http://i.imgur.com/iH6cmUD.png
~/views/mvctest.cshtml/视图/mvctest.cshtml
@inherits Umbraco.Web.Mvc.UmbracoViewPage<TestModel>
@{
Layout = null;
}
<h1>Hello, World!</h1>
~/app\u代码/test/testcontroller.cs
using System.Web.Mvc;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;
public class TestController : RenderMvcController {
public override ActionResult Index(RenderModel model) {
var test = new TestModel(model.Content, model.CurrentCulture);
return base.Index(test);
}
}
~/app\u代码/test/testmodel.cs
using System.Globalization;
using Umbraco.Core.Models;
using Umbraco.Web.Models;
public class TestModel : RenderModel {
public TestModel(IPublishedContent content, CultureInfo culture)
: base(content, culture) {
}
}
有人看到明显的问题吗?这真的很奇怪,因为我在其他一些自定义模型和控制器上有基本相同的代码,所以我完全搞不懂为什么任何新类型都会给我这个错误。
最佳答案
您的代码几乎是正确的,问题是您的视图被称为MVCtest.cshtml
,因为您的文档类型可能被称为MVCtest
,但是您的控制器只是被称为TestController
,而不是MVCTestController
。
umbraco的路由非常具体,因为它将通过具有匹配名称的控制器路由特定文档类型的所有流量。
而且,您不需要return base.Index(test);
,只需要return CurrentTemplate(test);
另外一点是,umbraco默认情况下将尝试通过Index
操作路由,除非您有与模板名称匹配的操作。因此,可以有多个模板,每个模板都有单独的操作。