继承自ViewPage强制在视图中显式转换模型

我尝试继承ViewPage,如此问题所示继承自ViewPage 但我得到了一个   编译器错误消息:CS1061:'object'不包含'Spot'的定义,并且没有扩展方法'Spot'接受类型'object'的第一个参数可以找到(你是否缺少using指令或程序集引用?) 我的viewpage,当我直接从ViewPage继承时,通常我可以做Model.ChildProperty(Spot),所以我也在这里做。但它失败了。
 <%@ 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
{
}
}
那么如何在没有显式演员的情况下让它工作呢?     
已邀请:
您是否有理由需要ViewPageBase从ViewPageBase派生?它看起来不像ViewPageBase添加任何东西。 最简单的解决方案是将ViewPageBase更改为从ViewPage派生,而不是从ViewPageBase派生。 ViewPageBase的Model属性是object类型。 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);
    }
}
    

要回复问题请先登录注册