我正在尝试创建一个继承自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
答案 0 :(得分:3)
您的问题是您的标记定义了Control
而ListView
是WebControl
。
答案 1 :(得分:1)
如错误所示,您必须从'System.Web.UI.UserControl'继承以创建自定义用户控件。要扩展服务器控件,您必须创建自定义Web服务器控件而不是自定义用户控件。以下链接说明了如何执行此操作: Walkthrough: Creating a Web Custom Control
答案 2 :(得分:1)
摆脱标记。将继承的控件添加为简单类。如果正确引用程序集,则可以在其他aspx页面中使用自定义列表视图而不会出现问题。以下是我对类似遗留代码所做的工作:
在您的aspx页面中,像这样引用程序集:
<%@ Register Assembly="MyCompany.MyProject" Namespace="MyCompany.MyProject" TagPrefix="cc1" %>
并在标记中使用您的控件,如下所示:
<cc1:MyListView ID="MyListView1" runat="server" />