2

传统上,我使用常规的 asp.net 网站(使用文件 > 新网站创建)。最近,我选择完成一个成熟的项目(使用文件 > 新项目 > ASP.net Web 应用程序创建)。

多年来,我一直在使用相同的自定义控件,没有发生任何事故。我只需创建新网站,将我的 CustomControls.cs 文件放在 App_Code 目录中,在 web.config 文件中添加一行,我就可以使用我的所有自定义服务器控件。当我尝试使用我的网络项目时,我收到以下错误

错误 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 项目中工作?

感谢大家。

4

4 回答 4

1

将您的自定义类编译为 .dll 并添加对您的项目的引用。

于 2010-11-04T06:40:59.347 回答
0

WebApplication 项目中的App_Code目录无效。所有代码文件,无论它驻留在哪个目录中,都被编译成一个程序集,并且该程序集被放置在该bin目录中。

只需将所有文件移出App_Code然后删除App_Code.

于 2010-11-08T02:43:52.577 回答
0

好吧,简单地回答一下,WAP 和网站有不同的编译应用程序的方式,因此您可能会看到这种行为。

于 2010-10-30T08:22:28.617 回答
0

使用 WAP 时,最好不要将自定义控件放在 App_Code 中。相反,只需将该代码放在项目中的其他位置,您就应该能够毫无问题地使用页面中的控件。

于 2010-11-05T16:05:28.187 回答