传递到字典中的模型项的类型为"Umbraco.Web.Models.RenderModel",但此字典需要"TestModel"类型的模型项

Nat*_*han 4 c# asp.net-mvc umbraco

我试图将一个新的MVC模板添加到我过去几个月一直在开发的现有网站上.我有几个自定义控制器/模型设置工作正常.今天我尝试添加另一个新模板,我遇到了这个错误,我无法通过.Umbraco版本是7.04.

一,错误:

http://i.imgur.com/iH6cmUD.png

〜/查看/ MVCTest.cshtml

@inherits Umbraco.Web.Mvc.UmbracoViewPage<TestModel>
@{
  Layout = null;
}
<h1>Hello, World!</h1>
Run Code Online (Sandbox Code Playgroud)

〜/ App_Code文件/测试/ 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

〜/ App_Code文件/测试/ 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) {

    }

}
Run Code Online (Sandbox Code Playgroud)

有人看到任何明显的问题吗?这真的很奇怪,因为我有一些基本相同的代码适用于其他一些自定义模型和控制器,所以我完全混淆为什么任何新类型给我这个错误.

Dig*_*ift 7

您的代码几乎是正确的,问题是您的视图被调用,MVCtest.cshtml因为可能是您的文档类型被调用MVCtest,但是您的Controller只是被调用TestController而不是MVCTestController.

Umbraco的路由非常具体,因为它将通过具有匹配名称的控制器路由特定文档类型的所有流量.

而且,你不需要return base.Index(test);,只是return CurrentTemplate(test);

另外一点是Umbraco默认会尝试通过Index操作进行路由,除非您有与模板名称匹配的操作.因此,您可以有多个模板,每个模板都有不同的操作.