在 ASP.NET MVC 中,为啥我不能从“MyCustomView”继承而不指定完整的类型名称? [复制]
Posted
技术标签:
【中文标题】在 ASP.NET MVC 中,为啥我不能从“MyCustomView”继承而不指定完整的类型名称? [复制]【英文标题】:In ASP.NET MVC, why can't I inherit from "MyCustomView" without specifying the full type name? [duplicate]在 ASP.NET MVC 中,为什么我不能从“MyCustomView”继承而不指定完整的类型名称? [复制] 【发布时间】:2010-04-21 15:21:52 【问题描述】:在我的 MVC 应用程序中,我通常会声明我的所有视图都继承自的基本视图类型。当我在页面声明中指定 Inherits="MyView"
时出现解析器错误,但如果我指定 Inherits="MyApp.Web.Views.MyView"
则不会。
奇怪的是,如果我指定一个强类型视图名称,它工作正常:Inherits="MyView<T>
(其中 T 是任何有效类型)。
为什么我可以指定没有完整类型名称的强类型视图,但不能指定通用视图?
我的基本视图类是这样声明的:
namespace MyApp.Web.Views
public class MyView : MyView<object>
public class MyView<TModel> : ViewPage<TModel> where TModel : class
更新:请注意,我确实通过 web.config 导入 MyApp.Web.Views。如果我不这样做,那么强类型方法 (Inherits="MyView<T>"
) 也不起作用。
【问题讨论】:
【参考方案1】:来自另一篇文章:这是根本问题:ASP.NET 页面解析器不支持泛型作为页面类型
在此处阅读更多信息-Generic Inherited ViewPage<> and new Property
【讨论】:
非常有趣...我还没有阅读该页面上的所有代码,但听起来我报告的问题是由一些通用/非通用 juju 引起的在幕后进行。如果我成功地使用 Justin 的代码解决了我的问题,我将在此处发布更新。【参考方案2】:您可以将命名空间添加到 web.config 文件的 <namespaces>
元素,然后您应该可以使用 Inherits="MyView"
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.html" />
<add namespace="System.Web.Routing" />
<add namespace="MyApp.Web.Views" />
</namespaces>
</pages>
【讨论】:
我做这样导入命名空间。否则强类型视图 [Inherits="MyView[ModelType]"] 也不起作用。 @Seth:但是,你在 web.config 中添加了命名空间吗?以上是关于在 ASP.NET MVC 中,为啥我不能从“MyCustomView”继承而不指定完整的类型名称? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Asp.net MVC4 不能使用 SQL Server Session 状态存储的 cookieless
ASP.NET-MVC5 - 为啥 Bootstrap v4 主题不能正确显示组件?
为啥 [Authorize(Roles = "Admin")] 不能在具有 ASP.NET 标识的 MVC 5 RTM 中工作?
为啥我们需要避免在 ASP.NET MVC 视图中直接使用 IQueryable?