我是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; }
}
}
答案 0 :(得分:2)
使用主模板的所有视图都应来自@inherit
{。}}。{/ p>
UmbracoTemplatePage
实际上继承自UmbracoTemplatePage
,还有两个额外的属性Umbraco.Web.Mvc.UmbracoViewPage<RenderModel>
和CurrentPage
,后者就像你说的是Umbraco
类的一个实例。
我很确定你不能用自定义模型替换它,因为模型的实例是由Umbraco路由决定的。
但是,如果您希望视图具有自定义模型,则应该使用子操作。这些允许您将自定义对象独立于UmbracoHelper
传递到页面中。如果您希望在所有页面/视图中都可以使用某些内容,无论它们是视图,部分视图还是子操作,您都可以创建一个全局过滤器,例如从会话中将数据设置到Viewbag。
这里有一些文档可以帮助您了解the Umbraco MVC basics。
答案 1 :(得分: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 );
}
}