2015-10-31 20 views
0

BaseRenderModel<TBaseEntity>類,說Constructor on type 'Jahan.Nuts.Model.UModel.HomePage' not found.Activator.CreateInstance找不到構造

我仔細檢查了代碼,並在閱讀關於它的互聯網一些解決方案,但我無法解決我的問題得到了一個錯誤。 我在項目中使用了Umbraco 7.3(ASP.NET MVC)

我該如何解決這個問題?

namespace Jahan.Nuts.Model.UModel.URenderModel 
{ 
public class BaseRenderModel<TBaseEntity> : RenderModel where TBaseEntity : BaseEntity 
{ 

    public TBaseEntity Model { get; set; } 
    public BaseRenderModel(IPublishedContent content, CultureInfo culture) : base(content, culture) 
    { 
     object args = new object[] { content, culture }; 
     Model = (TBaseEntity)Activator.CreateInstance(typeof(TBaseEntity), args); //Constructor on type 'Jahan.Nuts.Model.UModel.HomePage' not found. 
    } 
} 
} 

類BaseEntity:

public class BaseEntity 
{ 
    public BaseEntity() 
    { 

    } 
    public BaseEntity(IPublishedContent content, CultureInfo culture) 
    { 
     // some codes 
    } 
    public BaseEntity(IPublishedContent content) 
    { 
     // some codes 
    } 
} 

類主頁:

public class HomePage : BaseEntity 
{ 
    public List<Photo> PhotoList { get; set; } 

    public HomePage(IPublishedContent content, CultureInfo culture) : base(content, culture) 
    { 
     Initialize(content, culture); 
    } 
    public HomePage(IPublishedContent content) : base(content) 
    { 
     Initialize(content, null); 
    } 
    protected HomePage() 
    { 
    } 
} 

類HomePageController:

public class HomePageController : RenderMvcController 
{ 
    public override ActionResult Index(RenderModel model) 
    { 
     BaseRenderModel<HomePage> instance = new BaseRenderModel<HomePage>(model.Content, model.CurrentCulture); 
     return base.Index(instance); 
    } 
} 
+0

可能HomePage需要一個具有匹配簽名的構造函數:public BaseEntity(IPublishedContent content,CultureInfo culture); – bit

+0

我添加了主頁。你可以看到。我認爲是對的。 – Jahan

回答

3

有在這一行錯誤:

object args = new object[] { content, culture }; 

當你把它傳遞給Activator.CreateInstance,它在尋找一個構造函數,需要一個object[]參數。你需要參數object[]

object[] args = new object[] { content, culture };