在Umbraco中使用自定义模型 - 错误?

时间:2017-06-07 17:58:45

标签: asp.net-mvc model-view-controller umbraco models

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

Cannot bind source type Umbraco.Web.Models.RenderModel to model type MyParser.Model.MyModel.

包含此模型的代码是我正在“导入”Umbraco站点的旧项目 - 它曾经只是一个vanilla MVC应用程序。

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

调用模型的布局看起来像这样;

@inherits Umbraco.Web.Mvc.UmbracoViewPage<MyParser.Model.MyModel>
@{
    Layout = null;
}

模型看起来像这样

namespace MyParser.Model
{
    public class MyModel
    {
        public string Name { get; set; }
        public string Value1 { get; set; }
        public bool IsValid { get; set; }
    }
}

代码在vanilla MVC应用程序中运行良好,但需要修改才能在Umbraco-app内部运行 - 但是如何? 这是Umbraco 7.6

1 个答案:

答案 0 :(得分:0)

如果是文档类型模板,则需要劫持路径以注入视图模型。您创建继承自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; }
    }
}

现在你的模板就变成了。

@inherits Umbraco.Web.Mvc.UmbracoViewPage<ViewModel<MyModel>>
@{
    Layout = "Master.cshtml";
    //you can now access properties from MyModel like Model.CustomModel.IsValid...
}

可在此link上找到更多信息。