在 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&lt;T&gt;") 也不起作用。

【问题讨论】:

【参考方案1】:

来自另一篇文章:这是根本问题:ASP.NET 页面解析器不支持泛型作为页面类型

在此处阅读更多信息-Generic Inherited ViewPage<> and new Property

【讨论】:

非常有趣...我还没有阅读该页面上的所有代码,但听起来我报告的问题是由一些通用/非通用 juju 引起的在幕后进行。如果我成功地使用 Justin 的代码解决了我的问题,我将在此处发布更新。【参考方案2】:

您可以将命名空间添加到 web.config 文件的 &lt;namespaces&gt; 元素,然后您应该可以使用 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?

在默认的 ASP.Net MVC 模板中,为啥用户每次更改时都会重新登录?

为啥要使用内联编码来开发 MVC ASP.NET?