我有一个带动态创建文本框的复合用户控件。在创建文本框并将其插入ASCX上的占位符时,我还会动态创建一个AutoCompleteExtender,以刚刚创建的文本框为目标。如果我只添加一个ACE,一切正常,但只要页面上有多个ACE,我就会收到以下错误:
Microsoft JScript运行时错误:无法获取属性'_behaviors'的值:object为null或undefined
这是jQuery中包含的JScript错误的具体位置。
var c = a._behaviors = a._behaviors || [];
如果我在页面上创建虚拟文本框和ACE,则相同的代码可以正常工作。但我需要在自定义控件中创建这些。
这表明我“做得对” - 而且,因为我可以让一个ACE在控制中正常工作。
我正在使用网络服务 - 不是页面方法 - 我意识到用户和自定义控件不能包含页面方法,这些方法必须位于“页面”中。
我尝试了很多东西 - 我确保文本框都有唯一的ID。 ACE都有唯一的ID。我已尝试使用和不在ACE上定义ACE(再次使用唯一ID)。我知道Web服务有效,因为单个ACE运行良好。
我甚至尝试将生成的ACE列表从控件传递到页面级别,然后将它们插入到页面级占位符中。然后我得到RTE,找不到提供ID的文本框。
使用动态生成的文本框和扩展程序在复合用户控件中添加多个ACE的任何提示?
问候。
答案 0 :(得分:0)
这对我有用:
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);
}
}
}
}