这是ASP.NET 3.5中的错误吗?

时间:2011-02-11 12:09:49

标签: c# asp.net

在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错误?

1 个答案:

答案 0 :(得分:2)

这不是滥用的错误。如果您在IDE中执行此操作,则无法为控件提供包含-的ID,因此尝试动态执行此操作应该会产生意外结果。数学函数充满了像这样的特性,而不是错误。当然MS可能已经在属性中添加了一个函数,该函数在允许设置之前检查ID中的无效字符,但这无论如何都是运行时错误(这就是你所拥有的)。