自定义控件中的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,并使用动态生成的文本框和扩展程序,有什么技巧吗?
谨致问候。
这对我有效:
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);
}
}
}
}