0

我正在尝试创建一个继承自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 System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData) 处的 .ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly 程序集)"

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

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

-一种

4

3 回答 3

3

您的问题是您的标记定义了 aControl并且 aListView是 a WebControl

于 2012-05-11T18:28:16.667 回答
1

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

于 2012-05-11T18:33:58.477 回答
1

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

  • 将一个普通的 MyListView.cs 类添加到您的项目中。
  • 将“代码隐藏”文件中的所有代码复制到这个新文件中。
  • 删除原来的ascxascx.csascx.designer.cs文件。

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

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

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

<cc1:MyListView ID="MyListView1" runat="server" />
于 2013-11-13T09:20:23.320 回答