代码之家  ›  专栏  ›  技术社区  ›  Steve French

尝试使用自定义服务器控件(在应用程序代码目录中)时,全局命名空间中出现问题

  •  2
  • Steve French  · 技术社区  · 14 年前

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

    错误225 在全局命名空间中找到 你错过了一个集会 参考?)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" />
    

    我已经尽我所能让这个工作和编译。自定义服务器控件的intellisense工作正常,只是无法编译。

    我还得到一个错误“基类 包括“blanro”字段,但是 类型(DTF.DateBoxFull)不是 与控件类型兼容 (DTF.DateBoxFull)。”

    谢谢大家。

    4 回复  |  直到 14 年前
        1
  •  1
  •   Gthompson83    14 年前

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

        2
  •  0
  •   Rahul Soni    14 年前

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

        3
  •  0
  •   David Ebbo    14 年前

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

        4
  •  0
  •   Max Toro    14 年前

    App_Code WebApplication项目中的目录无效。所有代码文件,无论其所在的目录如何,都被编译为一个程序集,并且该程序集被放置在 bin 目录。

    把你所有的文件都搬出去 应用程序代码 然后删除 .