自定义控件中的AutoCompleteExtender

本文关键字:AutoCompleteExtender 自定义控件 | 更新日期: 2023-09-27 17:58:36

我有一个带有动态创建的文本框的复合用户控件。当文本框被创建并插入ASCX上的占位符时,我还动态地创建了一个AutoCompleteExtender,针对刚刚创建的文本框。如果我只添加一个ACE,一切都很好,但一旦页面上出现多个ACE,我就会收到以下错误:

Microsoft JScript运行时错误:无法获取属性"_behaviors"的值:对象为null或未定义

这是jQuery中包含的JScript错误的特定位置。

var c=a_行为=a_行为||[];

如果我在页面上创建伪文本框和ACE,同样的代码也能工作。但我需要在自定义控件中创建这些。

这表明我"做得很好"——而且,因为我可以让一个ACE在控制中正常工作。

我使用的是web服务,而不是页面方法。我意识到用户和自定义控件不能包含页面方法,这些方法必须在"页面"中

我尝试了很多方法——我确保文本框都有唯一的ID。ACE都有唯一的ID。我已经尝试过在定义的ACE上使用和不使用BehaviorID(再次使用唯一ID)。我知道web服务之所以有效,是因为一个ACE运行得很好。

我甚至尝试过将生成的ACE的列表从控件传递到页面级别,并将它们插入到页面级别的占位符中。然后我得到RTE,无法使用提供的ID找到文本框。

在复合用户控件中添加多个ACE,并使用动态生成的文本框和扩展程序,有什么技巧吗?

谨致问候。

自定义控件中的AutoCompleteExtender

这对我有效:

public partial class multiACEfromCodeBehind : System.Web.UI.Page
{
    public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
           server control at run time. */
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {   
            for(int i = 0; i < 10; i++)
            {
                // Create TextBox and its properties
                string textBoxID = String.Format("{0}_{1}", "AutoCompleteTextBox", i);
                TextBox textbox = new TextBox();
                textbox.ID = textBoxID;
                textbox.Width = new Unit(250);
                textbox.Attributes.Add("autocomplete", "off");
                // Create AutoCompleteExtender and its properties
                AutoCompleteExtender autoCompleteExtender = new AjaxControlToolkit.AutoCompleteExtender();
                autoCompleteExtender.TargetControlID = textBoxID;
                autoCompleteExtender.ServiceMethod = "GetCompletionList";
                autoCompleteExtender.ServicePath = "YourAutoCompleteWebService.asmx";
                autoCompleteExtender.CompletionInterval = 1500;
                autoCompleteExtender.CompletionSetCount = 10;
                autoCompleteExtender.EnableCaching = true;
                // Add created controls to the page controls collection
                this.Controls.Add(textbox);
                this.Controls.Add(autoCompleteExtender);
            }
        }
    }
}
相关文章:
  • 没有找到相关文章