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

时间:2012-05-11 18:19:38

标签: c# asp.net listview user-controls

我正在尝试创建一个继承自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'。在System.Web.UI.TemplateParser.ProcessError(String message)    在System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName,String codeFileBaseTypeName,String src,Assembly assembly)    在System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData)“

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

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

-A

3 个答案:

答案 0 :(得分:3)

您的问题是您的标记定义了ControlListViewWebControl

答案 1 :(得分:1)

如错误所示,您必须从'System.Web.UI.UserControl'继承以创建自定义用户控件。要扩展服务器控件,您必须创建自定义Web服务器控件而不是自定义用户控件。以下链接说明了如何执行此操作: Walkthrough: Creating a Web Custom Control

答案 2 :(得分:1)

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

  • 将一个简单的MyListView.cs类添加到您的项目中。
  • 将“codebehind”文件中的所有代码复制到此新文件中。
  • 删除原始 ascx ascx.cs ascx.designer.cs 文件。

在您的aspx页面中,像这样引用程序集:

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

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

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