Page_ClientValidate()对象预期错误,无法找到validation器

我有一个表单HomePage.aspx包含一个空的asp:Panel,一个下拉列表,让用户选择一个SPFielType …索引更改,我的HomePage.aspx.cs页面将获得选中的文本,并将在面板中加载用户控件,这个用户控件将根据用户选择的spfieldtype和一个调用validateForm()函数的按钮生成一个控件…我的问题是validateForm()内的Page_ClientValidate()函数找不到validation器,我也尝试过给一个组名,但仍然没有工作。
当我将按钮放入我的aspx页面(不动态渲染)时,它正在validation我的页面。( )。
但是当我动态渲染它时,无法validation表单。这就是我想要做的:

 protected override void CreateChildControls() { try { fieldRenderingControl = this.CreateFieldRenderingControl(this.FieldType); this.Controls.Add(fieldRenderingControl); Button button = new Button(); button.UseSubmitBehavior = false; button.Text = "ValidateButton"; button.ID = "ValidateButton"; button.OnClientClick = "validateForm()"; this.Controls.Add(button); RequiredFieldValidator newValidator = new RequiredFieldValidator(); newValidator.Text = "***"; newValidator.ID = "valideee"; newValidator.EnableClientScript = true; newValidator.Enabled = true; newValidator.SetFocusOnError = true; newValidator.Display = ValidatorDisplay.Dynamic; newValidator.ControlToValidate = fieldRenderingControl.ID; this.Controls.Add(newValidator); } catch (Exception ex) { } } 

// CreateFieldRenderingControl()函数将根据用户选择的参数fieldType生成控件。

提前致谢。

Sharepoint有一个丑陋的怪癖,它可以指定一个Guid作为控件的id。 我见过Sharepoint生成的JavaScript试图将这些Guids用作变量名。 这不好 – 它打破了脚本 – JavaScript变量名称中不允许使用短划线。 我怀疑这是你遇到的问题。 而且,我猜罪魁祸首就是this.CreateFieldRenderingControl() 。 看起来这个方法正在生成一个Id …是Id a Guid? 如果是这样,尝试用安全的东西覆盖Id,或者只是从Guid中删除破折号。

 fieldRenderingControl.ID.Replace("-", ""); 

如果这不是确切的解决方案,希望它足以让你指向正确的方向。

加载控件后,请检查ID控件By Firebug,或者仅查看HTML的来源,因为当您放入其他控件时,某些控件会在渲染时更改其ID。 如果可以,也可以编写htmnl代码的代码。

试试这个(在Page_ClientValidation函数中传递组名作为参数)

 Page_ClientValidation("group") 

试试这个:

 newValidator.ControlToValidate = fieldRenderingControl.ClientID; 

而不是Page_ClientValidate(),使用:

 ValidatorValidate("id of field rendering control"); 

但是,在您的一个回复中,此ID为“Field_4a4ab3a1-d5cc-4fbb-a212-ec5697827c75”,这不是有效的客户端ID。 连字符不能使用。 首先,确保客户端中的有效ID。

也许这篇文章太晚了……但这里有一些想法……
有几种可能的东西:
(1)validation器和要validation的控件是否在同一个面板中? 在validation完成时,可能存在隐藏的面板。
(2)如果你是动态创建的,那么这个创建是否放在了Page Load上? 如果是这样,是在第一次validation输入的函数中创建的? 可能没有必要这样做。
(3)使用受保护的覆盖void CreateChildControls()最终不会在所有重新加载过程中运行,特别是如果ViewState在某些控件中发生更改。 您可以将它放在页面加载中。
(4)其他替代方法是将按钮放在Panel中,但是visible属性= false,还有validation器,属性enabled = false。 当您运行该操作时,您更改这两个状态,您可以使用PostBack。