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 (文字列メッセージ) で System.Web.UI.TemplateParser で.ProcessInheritsAttribute (文字列 baseTypeName、文字列 codeFileBaseTypeName、文字列 src、アセンブリ アセンブリ) System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes (IDictionary parseData) で "

何がうまくいかないのか、またはある種の洗練された回避策を見つけようと、かなり長い間検索してきましたが、これまでの検索では何も役に立ちませんでした.

お時間を割いていただき、ありがとうございます。

-A

4

3 に答える 3

3

あなたの問題は、マークアップが a を定義しControl、 aListViewが a であることWebControlです。

于 2012-05-11T18:28:16.667 に答える
1

マークアップを取り除きます。継承したコントロールを単純なクラスとして追加します。アセンブリを適切に参照すると、カスタム リストビューを他の aspx ページで問題なく使用できます。以下は、同様のレガシーコードで行ったことです。

  • プレーンな MyListView.cs クラスをプロジェクトに追加します。
  • 「codebehind」ファイルからすべてのコードをこの新しいファイルにコピーします。
  • 元のascxascx.cs、およびascx.designer.csファイルを削除します。

aspx ページで、次のようにアセンブリを参照します。

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

そして、次のようにマークアップでコントロールを使用します。

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

エラーが示すように、「System.Web.UI.UserControl」から継承してカスタム ユーザー コントロールを作成する必要があります。サーバー コントロールを拡張するには、カスタム ユーザー コントロールではなく、カスタム Web サーバー コントロールを作成する必要があります。次のリンクでは、これを行う方法について説明しています: ウォークスルー: Web カスタム コントロールの作成

于 2012-05-11T18:33:58.477 に答える