2010-05-28 25 views
0

模型的明確鑄造我嘗試自ViewPage inhering如圖這一問題Inheriting from ViewPage自ViewPage力量鑑於

但我得到一個

編譯器錯誤消息繼承:CS1061:「對象」不包含關於「點」的定義和沒有擴展方法「點」接受類型「對象」的第一個參數可以找到(是否缺少using指令或程序集引用?)

我的ViewPage,通常我可以做Model.Ch ildProperty(Spot)直接從ViewPage繼承,所以我也是這樣做的。但它失敗了。

<%@ Page Language="C#" Inherits="Company.Site.ViewPageBase<WebSite.Models.SpotEntity>" %> 

    <h1><%= Html.Encode(Model.Spot.Title) %></h1> 

要得到它的正常工作,我必須這樣做:

<%@ Page Language="C#" Inherits="Company.Site.ViewPageBase<WebSite.Models.SpotEntity>" %> 

    <h1><%= Html.Encode(((WebSite.Models.SpotEntity)Model).Spot.Title) %></h1> 

這裏是我的課:

namespace Company.Site 
{ 
public class ViewPageBase<TModel> : Company.Site.ViewPageBase where TModel:class 
{ 
    private ViewDataDictionary<TModel> _viewData; 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public new ViewDataDictionary<TModel> ViewData 
    { 
     get 
     { 
      if (_viewData == null) 
      { 
       SetViewData(new ViewDataDictionary<TModel>()); 
      } 
      return _viewData; 
     } 
     set 
     { 
      SetViewData(value); 
     } 
    } 

    protected override void SetViewData(ViewDataDictionary viewData) 
    { 
     _viewData = new ViewDataDictionary<TModel>(viewData); 

     base.SetViewData(_viewData); 
    } 
} 

public class ViewPageBase : System.Web.Mvc.ViewPage 
{ 
} 
} 

那麼,如何得到它沒有明確科協工作?

+0

應該不是你的ViewPageBase 繼承System.Web.Mvc.ViewPage ? – Jab 2010-05-28 16:33:47

回答

2

是否有你需要ViewPageBase從ViewPageBase派生的原因?它看起來不像ViewPageBase添加任何東西。

最簡單的解決方案是將ViewPageBase更改爲從ViewPage派生,而不是從ViewPageBase派生。 ViewPageBase的Model屬性是對象類型。 ViewPage的Model屬性是TModel(換句話說,就是您指定的類型)。

如果你絕對必須從ViewPageBase派生,你可以試試下面的(這是的ViewPage使用模式:

public class ViewPageBase<TModel> : ViewPageBase { 
    private ViewDataDictionary<TModel> _viewData; 

    public new TModel Model { 
     get { 
      return ViewData.Model; 
     } 
    } 

    public new ViewDataDictionary<TModel> ViewData { 
     get { 
      if (_viewData == null) { 
       SetViewData(new ViewDataDictionary<TModel>()); 
      } 
      return _viewData; 
     } 
     set { 
      SetViewData(value); 
     } 
    } 

    protected override void SetViewData(ViewDataDictionary viewData) { 
     _viewData = new ViewDataDictionary<TModel>(viewData); 

     base.SetViewData(_viewData); 
    } 
}