从 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) "
我已经搜索了相当长的时间,试图确定出了什么问题或某种优雅的解决方法,但到目前为止,我的搜索没有任何有用的结果。
提前感谢您抽出宝贵时间帮助我。
-一个
你的问题是你的标记定义了一个Control
,而ListView
是一个WebControl
。
正如错误所说,您必须从"System.Web.UI.UserControl"继承才能创建自定义用户控件。要扩展服务器控件,您必须创建自定义 Web 服务器控件而不是自定义用户控件。以下链接说明了如何执行此操作:演练:创建 Web 自定义控件
删除标记。将继承的控件添加为简单类。如果正确引用程序集,则可以在其他 aspx 页中使用自定义列表视图,而不会出现问题。以下是我对类似遗留代码所做的:
- 将一个普通的 MyListView.cs 类添加到项目中。
- 将"代码隐藏"文件中的所有代码复制到此新文件。 删除原始 ascx
- 、ascx.cs 和 ascx.designer.cs 文件。
在 aspx 页中,按如下所示引用程序集:
<%@ Register Assembly="MyCompany.MyProject" Namespace="MyCompany.MyProject" TagPrefix="cc1" %>
并在标记中使用控件,如下所示:
<cc1:MyListView ID="MyListView1" runat="server" />