从 ASP.NET ListView 继承,“这里不允许,因为它不扩展类'System.Web.UI.UserC

本文关键字:扩展 UI Web System UserC 因为 继承 ListView NET ASP 这里 | 更新日期: 2023-09-27 18:34:05

>我正在尝试创建一个继承自System.Web.UI.WebControls.ListView的自定义控件。 代码隐藏:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using System.Text;
namespace MyCompany.MyProject
{        //I've tried this without the "<T>" as well.  Either seems to compile
         //but neither works at runtime.
    public partial class MyListView<T> : ListView
    {
    ...
    }
}

标记:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyListView.ascx.cs" Inherits="MyCompany.MyProject.MyListView" %>

这一切都可以编译,但是当我尝试加载页面时,出现以下错误:

"'MyCompany.MyProject.MyListView'在这里是不允许的,因为它不扩展类'System.Web.UI.UserControl'。 at System.Web.UI.TemplateParser.ProcessError(String message) at System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly assembly) at System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData) "

我已经搜索了相当长的时间,试图确定出了什么问题或某种优雅的解决方法,但到目前为止,我的搜索没有任何有用的结果。

提前感谢您抽出宝贵时间帮助我。

-一个

从 ASP.NET ListView 继承,“这里不允许,因为它不扩展类'System.Web.UI.UserC

你的问题是你的标记定义了一个Control,而ListView是一个WebControl

正如错误所说,您必须从"System.Web.UI.UserControl"继承才能创建自定义用户控件。要扩展服务器控件,您必须创建自定义 Web 服务器控件而不是自定义用户控件。以下链接说明了如何执行此操作:演练:创建 Web 自定义控件

删除标记。将继承的控件添加为简单类。如果正确引用程序集,则可以在其他 aspx 页中使用自定义列表视图,而不会出现问题。以下是我对类似遗留代码所做的:

  • 将一个普通的 MyListView.cs 类添加到项目中。
  • 将"代码隐藏"文件中的所有代码复制到此新文件。
  • 删除原始 ascx
  • ascx.csascx.designer.cs 文件。

在 aspx 页中,按如下所示引用程序集:

<%@ Register Assembly="MyCompany.MyProject" Namespace="MyCompany.MyProject" TagPrefix="cc1" %>

并在标记中使用控件,如下所示:

<cc1:MyListView ID="MyListView1" runat="server" />