为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好
Posted
技术标签:
【中文标题】为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好【英文标题】:Why can't I use C# Syntax in the Inherits Attribute for a Closed Generic but CLR Syntax is fine为什么我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好 【发布时间】:2011-01-15 20:30:25 【问题描述】:以下 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,但如果使用来自 ASP.NET MVC 的System.Web.Mvc.ViewPage<>
,则效果很好。
我的MyBasePage
看起来像这样:
public class MyBasePage<TModel> : Page where TModel : class
public TModel Model
get return (TModel)HttpContext.Current.Items["model"];
【问题讨论】:
【参考方案1】:了解您遇到的异常会有所帮助,但我怀疑问题在于 ASP.net 不直接支持通用页面基类。它是在 MVC 中使用一些 hack 实现的。
如果您正在使用 Web 表单,您可以自己重复此 hack,这应该会有所帮助:
Generic Inherited ViewPage<> and new Property
【讨论】:
詹姆斯 - 感谢您的链接。我想你准确地指出了发生了什么。为了记录,我得到的错误是:解析器错误描述:解析服务此请求所需的资源期间发生错误。请查看以下特定的解析错误详细信息并适当地修改您的源文件。解析器错误消息:无法加载类型“Website.MyBasePage以上是关于为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好的主要内容,如果未能解决你的问题,请参考以下文章