c# - 传入字典的模型项是 'Umbraco.Web.Models.RenderModel' 类型的,但是这个字典需要一个 'TestModel' 类型的模型项

标签 c# asp.net-mvc umbraco

我试图将新的 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/

相关文章:

asp.net-mvc - 如何从 umbraco mvc 中的表面 Controller 添加查询字符串以保留模型值

c# - 使用数组在 C# 中进行数据驱动测试

c# - [c#]如何让控制台在一行中读取两个字符串

asp.net-mvc - ASP.NET MVC 模型绑定(bind)不适用于 AJAX GET,但适用于 Post

c# - Umbraco 自定义 url 段

.net - 了解为 Umbraco 添加/创建新模板的基础知识

c# - GridView中LinkBut​​ton的行索引

c# - 如何在没有 Visual Studio 的情况下管理大型项目?

asp.net-mvc - Orchard Core主题 View 中液体和cshtml页面之间的区别

c# - Request.Url.AbsoluteUri 在 asp.net core 2.0 中不起作用(使用 System.Web)