在ASP.NET中,当我尝试向Placeholder
或任何其他控件容器添加动态控件(包括验证)时,控件名称变得很重要。例如,这是非常正常,易于控制的添加代码。
var control = LoadControl("TestUserControl.ascx");
control.ID = Guid.NewGuid().ToString();
PlaceHolder1.Controls.Add(control);
如你所见,我正在给guid控制ID。在运行时,此代码失败,编译器说这是一个javascript错误,并且错误消息如';'期待的人物,失踪......等等。
问题非常有趣。动态添加ASP.NET控件(包括验证),由于动态命名的ID属性中的“ - ”字符(或类似' - ','。'等等)导致错误。
当我改进我的代码时:
var control = LoadControl("TestUserControl.ascx");
control.ID = Guid.NewGuid().ToString().Replace("-", string.Empty);
PlaceHolder1.Controls.Add(control);
问题消失了:))
这是 ASP.NET 3.5 中的错误吗?为什么它看起来像页面中的javascript错误?
答案 0 :(得分:2)
这不是滥用的错误。如果您在IDE中执行此操作,则无法为控件提供包含-
的ID,因此尝试动态执行此操作应该会产生意外结果。数学函数充满了像这样的特性,而不是错误。当然MS可能已经在属性中添加了一个函数,该函数在允许设置之前检查ID中的无效字符,但这无论如何都是运行时错误(这就是你所拥有的)。