为什么我不能在Closed Generic的Inherits属性中使用C#语法,但CLR语法很好

以下CLR语法在我的aspx页面中正常工作:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Website.MyBasePage`1[HomePageViewModel]" %>

但是这个C#语法没有:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Website.MyBasePage<HomePageViewModel>" %>

注意,我没有使用ASP.NET MVC,但如果使用System.Web.Mvc.ViewPage<>这可以正常工作来自ASP.NET MVC.

我的MyBasePage看起来像这样:

public class MyBasePage<TModel> : Page where TModel : class {
    public TModel Model
    {
        get { return (TModel)HttpContext.Current.Items["model"]; }
    }
}

最佳答案 知道你得到的异常会有所帮助,但我怀疑问题是ASP.net不直接支持通用页面基类.它是在MVC中使用一些黑客来实现的.

如果您使用Web窗体,可以自己重复此hack,这应该有所帮助:

Generic Inherited ViewPage<> and new Property

点赞