我试图将新的 MVC 模板添加到过去几个月我一直在开发的现有网站。我有几个工作正常的自定义 Controller /模型设置。今天我尝试添加另一个新模板,但遇到了这个我无法克服的错误。 Umbraco 版本为 7.04。
一、错误:
http://i.imgur.com/iH6cmUD.png
~/Views/MVCTest.cshtml
@inherits Umbraco.Web.Mvc.UmbracoViewPage<TestModel>
@{
Layout = null;
}
<h1>Hello, World!</h1>
~/App_Code/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_Code/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) {
}
}
有人看到任何明显的问题吗?这真的很奇怪,因为我有基本上相同的代码用于其他一些自定义模型和 Controller ,所以我完全不明白为什么任何新类型都会给我这个错误。
最佳答案
你的代码几乎是正确的,问题是你的 View 被称为 MVCtest.cshtml
因为大概你的文档类型被称为 MVCtest
,但是你的 Controller 只是被称为 TestController
而不是 MVCTestController
。
Umbraco 的路由非常具体,因为它将通过具有匹配名称的 Controller 路由特定文档类型的所有流量。
此外,您不需要return base.Index(test);
,只需return CurrentTemplate(test);
另外一点是,Umbraco 默认会尝试通过 Index
操作进行路由,除非您有与模板名称匹配的操作。因此,您可以有多个模板,每个模板都有单独的操作。
关于c# - 传入字典的模型项是 'Umbraco.Web.Models.RenderModel' 类型的,但是这个字典需要一个 'TestModel' 类型的模型项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494514/