我尝试从 ViewPage 继承,如这个问题Inheriting from ViewPage
但我得到一个
编译器错误消息:CS1061:“object”不包含“Spot”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Spot”(您是否缺少 using 指令或程序集引用?)
我的视图页面,通常我可以在直接从 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
{
}
}
那么如何在没有显式转换的情况下让它工作呢?