1

我是 Umbraco 和 MVC 的新手 - 任何人都可以提供以下帮助吗?

我有一个主模板(Root.cshtml),它下面嵌套了模板。在其中一些我想使用自定义模型,但是 Root.cshtml 需要访问 Umbraco 助手。

所以嵌套页面继承自 Umbraco.Web.Mvc.UmbracoViewPage< CustomModel >,而 Root.cshtml 需要继承自更通用的东西。

我尝试让我的自定义模型从 Umbraco.Web.Models.RenderModel 继承,但是我一直被告知我的自定义模型不包含接受 0 个参数的构造函数,或者,如果我给它一个参数,那就是“Umbraco.Web .Models.RenderModel' 不包含采用 0 个参数的构造函数

我做错了什么,我应该如何完成这个嵌套?

namespace CRuMbraco.Web.Models {
public class RegisterModel : RenderModel {
    [Required]
    [Display(Name = "Customer code")]
    public string CustomerCode { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [DataType(DataType.EmailAddress)]
    [Display(Name = "Confirm email")]
    [Compare("Password", ErrorMessage = "The e-mail and confirmation e-mail do not match.")]
    public string ConfirmEmail { get; set; }

    [Required]
    [Display(Name = "FirstName")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "LastName")]
    public string LastName { get; set; }
}

}

4

2 回答 2

2

所有使用主模板的视图都应该@inherit来自UmbracoTemplatePage.

UmbracoTemplatePage实际上继承自Umbraco.Web.Mvc.UmbracoViewPage<RenderModel>并具有两个附加属性CurrentPageUmbraco,正如您所说的,后者是UmbracoHelper该类的一个实例。

我相当确定您不能用自定义模型替换它,因为模型的实例是由 Umbraco 路由确定的。

但是,如果您希望视图具有自定义模型,则应改为子操作。这些将允许您将自定义对象传递到页面中,而独立于RenderModel. 如果您希望某些内容在所有页面/视图中都可用,无论它们是视图、部分视图还是子操作,您可以创建一个全局过滤器,例如从会话将数据设置到 Viewbag。

这里有一些文档可以帮助您了解Umbraco MVC 基础知识

于 2013-01-09T13:43:52.523 回答
0

实际上,您可以像这样使用 UmbracoViewPage:

Umbraco.Web.Mvc.UmbracoViewPage<RegisterModel>

为此,您的自定义模型需要扩展 RenderModel,例如:

public class RegisterModel: RenderModel 
{
    public RegisterModel(IPublishedContent content, CultureInfo culture)
        : base(content, culture)
    {
    }
    // my properties here
}

您可以通过劫持路线来实例化您的自定义模型,请参阅: http: //our.umbraco.org/documentation/Reference/Mvc/custom-controllers

所以,你最终会得到类似的东西:

public class HomeController : Umbraco.Web.Mvc.RenderMvcController
{
    public override ActionResult Index(RenderModel model)
    {
        var customUmbracoModel = new RegisterModel(model.Content, model.CurrentCulture);

        // do some extra form stuff here

        return base.Index(customUmbracoModel );
    }
}
于 2013-07-09T02:39:44.780 回答