Asp.net mvc 在Umbraco中使用自定义模型-错误?

Asp.net mvc 在Umbraco中使用自定义模型-错误?,asp.net-mvc,model-view-controller,umbraco,models,Asp.net Mvc,Model View Controller,Umbraco,Models,在Umbraco中使用自定义模型时,出现以下错误: Cannot bind source type Umbraco.Web.Models.RenderModel to model type MyParser.Model.MyModel. 包含此模型的代码是我正在“导入”到Umbraco站点的一个旧项目,它过去只是一个普通的MVC应用程序 对于我的使用,它不需要与Umbraco或数据库交互-它只需要生活在同一个项目中 调用模型的布局如下所示 @inherits Umbraco.Web.Mvc.U

在Umbraco中使用自定义模型时,出现以下错误:

Cannot bind source type Umbraco.Web.Models.RenderModel to model type MyParser.Model.MyModel.
包含此模型的代码是我正在“导入”到Umbraco站点的一个旧项目,它过去只是一个普通的MVC应用程序

对于我的使用,它不需要与Umbraco或数据库交互-它只需要生活在同一个项目中

调用模型的布局如下所示

@inherits Umbraco.Web.Mvc.UmbracoViewPage<MyParser.Model.MyModel>
@{
    Layout = null;
}
该代码在香草MVC应用程序中运行良好,但需要进行修改,以便在Umbraco应用程序中运行,这似乎是正常的,但如何进行?
它是Umbraco 7.6

如果它是文档类型模板,则需要劫持路径以插入视图模型。创建从
RenderMvcController
继承的控制器,并重写
Index
方法

namespace Controllers
{
    public class [YourDocTypeAlias]Controller : RenderMvcController
    {
        public override ActionResult Index(RenderModel model)
        {
            var vm = new ViewModel<MyModel>(model);
            return View(vm);
        }
    }

    public class ViewModel<TModel> : RenderModel
    {
        public ViewModel(RenderModel model) : base(model.Content, model.CurrentCulture) { }

        public TModel CustomModel { get; set; }
    }

    public class MyModel
    {
        public string Name { get; set; }
        public string Value1 { get; set; }
        public bool IsValid { get; set; }
    }
}
命名空间控制器
{
公共类[YourDocTypeAlias]控制器:RenderMvcController
{
公共覆盖操作结果索引(RenderModel模型)
{
var vm=新视图模型(模型);
返回视图(vm);
}
}
公共类ViewModel:RenderModel
{
公共视图模型(RenderModel模型):基础(model.Content,model.CurrentCulture){}
公共TModel CustomModel{get;set;}
}
公共类MyModel
{
公共字符串名称{get;set;}
公共字符串值1{get;set;}
公共bool有效{get;set;}
}
}
现在,您的模板将变为

@inherits Umbraco.Web.Mvc.UmbracoViewPage<ViewModel<MyModel>>
@{
    Layout = "Master.cshtml";
    //you can now access properties from MyModel like Model.CustomModel.IsValid...
}
@继承Umbraco.Web.Mvc.UmbracoViewPage
@{
Layout=“Master.cshtml”;
//您现在可以从MyModel访问属性,如Model.CustomModel.IsValid。。。
}

可在此找到更多信息。

这是局部视图,文档类型模板吗?它是文档类型模板/layoutI没有单独为此创建特定的文档类型-它只使用通用的“Contentpage”文档类型,也用于“普通”Umbraco页面。我刚刚把页面分配给一个布局文件(如上所述),我应该为它创建一个自定义DocType吗?是的,你应该创建一个自定义DocType并劫持该文档类型的路由。啊,好的。我知道了,谢谢你。但是然后我是否需要将整个模型移动到“YourViewModel”类中?我的项目结构,包括2个项目。第一个项目是Umbraco现场本身。第二个项目是来自“导入”项目的模型,即“namespace MyParser.model”。。我需要将所有这些移到上面的类中吗?或者?在这种情况下,所有视图模型都需要从RenderModel继承,因此必须将模型移到ViewModel中。但是你可以创建一个继承自RenderModel的通用视图模型,并在不移动模型的情况下使用它。nvm-我想我找到了一个解决方案,只是我在瞎忙。感谢您的帮助-非常感谢:)
@inherits Umbraco.Web.Mvc.UmbracoViewPage<ViewModel<MyModel>>
@{
    Layout = "Master.cshtml";
    //you can now access properties from MyModel like Model.CustomModel.IsValid...
}