2

従来、私は通常のasp.net Webサイト([ファイル]> [新しいWebサイト]を使用して作成)を使用します。最近、本格的なプロジェクト([ファイル]>[新しいプロジェクト]>[ASP.net Webアプリケーション]を使用して作成)を使用することを選択しました。

私は何年も問題なく同じカスタムコントロールを使用しています。新しいWebサイトを作成し、CustomControls.csファイルをApp_Codeディレクトリに配置し、web.configファイルに1行追加するだけで、すべてのカスタムサーバーコントロールを使用できます。Webプロジェクトでそれを試してみると、次のエラーが発生します

エラー225タイプまたは名前空間名'DTF'がグローバル名前空間に見つかりませんでした(アセンブリ参照がありませんか?)D:[ドライブ上のプロジェクトの場所] \ AgIn02.aspx.designer.cs

私のカスタムコントロールファイルは次のようになります

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace DTF.Web.UI
{

    public class IntOnlyBox : TextBox
    {
        private RequiredFieldValidator rfv;
        private ValidatorCalloutExtender vce;
        private AjaxControlToolkit.FilteredTextBoxExtender ftb;
        private string strInvalidMessage = "";
        private string strValidationGroup = "";

        public string ValidationGroup
        {
            get
            {
                return strValidationGroup;
            }
            set
            {
                strValidationGroup = value;
            }
        }


        public string InvalidMessage
        {
            get
            {
                return strInvalidMessage;
            }
            set
            {
                strInvalidMessage = value;
            }
        }

        protected override void OnInit(EventArgs e)
        {
            rfv = new RequiredFieldValidator();
            rfv.ControlToValidate = this.ID;
            rfv.ErrorMessage = "<span style=\"color:black\"><b>Required Field Missing</b><br />" + this.InvalidMessage + "</span>";
            //rfv.ErrorMessage = this.InvalidMessage;
            rfv.ID = "rfv" + this.ID;
            rfv.Display = ValidatorDisplay.None;
            rfv.SetFocusOnError = true;
            rfv.EnableClientScript = true;
            rfv.ValidationGroup = this.ValidationGroup;

            vce = new AjaxControlToolkit.ValidatorCalloutExtender();
            vce.ID = "vce" + this.ID;
            vce.TargetControlID = "rfv" + this.ID;
            vce.Width = 300;

            ftb = new FilteredTextBoxExtender();
            ftb.ID = "ftb" + this.ID;
            ftb.TargetControlID = this.ID;
            ftb.FilterType = FilterTypes.Numbers;

            Controls.Add(rfv);
            Controls.Add(vce);
            Controls.Add(ftb);
        }

        protected override void Render(HtmlTextWriter w)
        {
            //w.Write(this.InvalidMessage);
            base.Render(w);
            rfv.RenderControl(w);
            vce.RenderControl(w);
            ftb.RenderControl(w);
        }
    }

}

私のweb.configエントリは次のようになります(ページ/コントロール領域)

<add tagPrefix="DTF" namespace="DTF.Web.UI" />

これを機能させてコンパイルするために、考えられるすべてのことを試しました。カスタムサーバーコントロールのインテリセンスは正常に機能し、コンパイルされません。

また、「基本クラスにはフィールド'blanro'が含まれていますが、そのタイプ(DTF.DateBoxFull)はコントロールのタイプ(DTF.DateBoxFull)と互換性がありません。」というエラーが表示されます。

これを修正する方法と、通常のasp.net Webサイトでは機能するが、Webプロジェクトでは機能しない理由はありますか?

みんな、ありがとう。

4

4 に答える 4

1

カスタムクラスを.dllにコンパイルし、プロジェクトへの参照を追加します。

于 2010-11-04T06:40:59.347 に答える
0

簡単に言うと、WAPとWebサイトではアプリケーションのコンパイル方法が異なるため、この動作が見られる場合があります。

于 2010-10-30T08:22:28.617 に答える
0

WAPを使用する場合は、カスタムコントロールをApp_Codeに配置しないことをお勧めします。代わりに、そのコードをプロジェクトの別の場所に配置するだけで、ページのコントロールを問題なく使用できるようになります。

于 2010-11-05T16:05:28.187 に答える
0

App_CodeWebApplicationプロジェクトのディレクトリは効果がありません。存在するディレクトリに関係なく、すべてのコードファイルは単一のアセンブリにコンパイルされ、そのアセンブリはbinディレクトリに配置されます。

すべてのファイルを移動してからApp_Code削除するだけApp_Codeです。

于 2010-11-08T02:43:52.577 に答える