2011-03-30 61 views
10

我有一个包含一个空asp:Panel,一个下拉列表让用户选择一个SPFielType ...在索引更改,我的HomePage.aspx.cs页面的HomePage.aspx将获得选中的文本,并将加载面板内的用户控件,该用户控件将生成一个基于用户选择的spfieldtype的控件和一个调用validateForm()函数的按钮......我的问题是Page_ClientValidate()函数里面的validateForm()不能找到验证器,我也试图给一个组名,但仍然无法正常工作。
当我把按钮放入我的aspx页面(不是动态呈现)时,它正在验证我的页面。(<asp:Button ID="submitbutton" Text="Validate" runat="server" />)。
但是,当林使其动态,不能验证form..This是林试图做:Page_ClientValidate()对象预期错误,无法找到验证程序

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()函数将生成基于用户选择的参数字段类型控制。

在此先感谢。

+0

您是否尝试使用诸如firebug或Web Developer之类的浏览器工具来调试您的js代码,以查看其发生故障的位置。 – gbs 2011-03-30 17:48:02

+0

是啊我做了..他不能识别验证器..我dono为什么..我也试图添加验证器的SPFIeld的控件,但没有解决方案.. – Grace 2011-03-31 10:04:34

回答

0

加载控件后,请检查ID控件通过Firebug或仅查看HTML源代码,因为有些控件在放入其他控件时,其ID在渲染时发生更改。 如果可以,请写下htmnl代码。

+0

不,我没有问题,ids ..他们渲染罚款....这是我的功能在javascript 函数ValidateRenderedControl(){ Page_ClientValidate(); 警报(Page_IsValid); } 警报总是返回true ..这意味着验证功能总是返回true – Grace 2011-04-29 11:49:39

0

试试这个(通组名,如Page_ClientValidation函数参数)

Page_ClientValidation("group") 
+0

是的,我已经尝试过。没有luckkkk – Grace 2011-05-25 13:33:03

+0

,我也试过这一个:this.Page.Validators.Add(newValidator); – Grace 2011-05-25 13:44:19

0

试试这个:

newValidator.ControlToValidate = fieldRenderingControl.ClientID; 
+0

我收到此错误:'valideee'的ControlToValidate属性引用的控件'Field_4a4ab3a1-d5cc-4fbb-a212-ec5697827c75'无法验证 – Grace 2011-05-25 13:41:22

0

相反Page_ClientValidate()的,使用:

ValidatorValidate("id of field rendering control"); 

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

3

Sharepoint有一个丑陋的怪癖,它可以指定一个Guid作为控件的id。我见过由Sharepoint生成的JavaScript尝试将这些Guids用作变量名称。这不好 - 它破坏了脚本 - 在JavaScript变量名称中不允许出现破折号。我怀疑这是你遇到的问题。而且,我猜猜罪犯是this.CreateFieldRenderingControl()。它看起来像该方法生成一个ID ...是这是一个指导?如果是这样,尝试用安全的东西来覆盖Id,也许只需从Guid中删除破折号。

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

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

0

也许这个职位是太晚了......但这里有一些想法...
有几种可能的事情:
(1)验证和控制,以验证在同一个面板?在验证完成的时候,可能有一个隐藏的面板。 (2)如果你是动态创建的,这个创建是否放在页面加载?如果是这样,是在函数中创建的,以便第一次验证输入?有可能没有必要这样做。 (3)使用protected override void CreateChildControls()最终不会在所有重装过程中运行,特别是如果ViewState在某些控件中更改时。你可以把它放在页面加载中。
(4)其他替代方法是将按钮放置在面板内,但visible属性= false且验证器的属性enabled = false。当你运行这个动作时,你改变了这两个状态,你可以使用PostBack。

相关问题