2

我有一个带有动态创建的文本框的复合用户控件。在创建文本框并将其插入 ASCX 上的占位符时,我还动态创建了一个 AutoCompleteExtender,以刚刚创建的文本框为目标。如果我只添加一个 ACE,一切正常,但是一旦页面上存在多个 ACE,我就会收到以下错误:

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

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

var c=a._behaviors=a._behaviors||[];

如果我在我的页面上创建虚拟文本框和 ACE,则相同的代码可以工作。但我需要在自定义控件中创建这些。

这表明我“做对了”——而且,因为我可以让 ONE ACE 在控件中正常工作。

我正在使用 Web 服务——不是页面方法——我意识到用户和自定义控件不能包含页面方法,它们必须在“页面”中。

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

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

在复合用户控件中添加多个 ACE 以及动态生成的文本框和扩展器的任何提示?

问候。

4

1 回答 1

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);
            }
        }
    }
}
于 2013-07-25T13:30:34.147 回答