问题描述
我有一个表单HomePage.aspx包含一个空的asp:Panel,一个下拉列表,让用户选择一个SPFielType ...索引更改,我的HomePage.aspx.cs页面将获得选中的文本,并将在面板中加载用户控件,这个用户控件将根据用户选择的spfieldtype和一个调用validateForm()函数的按钮生成一个控件...我的问题是validateForm()中的Page_ClientValidate()函数找不到验证器,我也尝试过给一个组名,但仍然没有工作。
当我将按钮放入我的aspx页面(不动态渲染)时,它正在验证我的页面。( <asp:Button ID="submitbutton" Text="Validate" runat="server" />
)。
但是当我动态渲染它时,无法验证表单。这就是我想要做的:
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生成控件。
提前致谢。
1楼
gilly3
3
2011-05-28 00:11:34
Sharepoint有一个丑陋的怪癖,它可以指定一个Guid作为控件的id。
我见过Sharepoint生成的JavaScript试图将这些Guids用作变量名。
这不是好事 - 它会破坏脚本 - JavaScript变量名称中不允许使用破折号。
我怀疑这是你遇到的问题。
而且,我猜罪魁祸首就是this.CreateFieldRenderingControl()
。
看起来这个方法正在生成一个Id ...是一个ID Guid?
如果是这样,尝试用安全的东西覆盖Id,或者只是从Guid中删除破折号。
fieldRenderingControl.ID.Replace("-", "");
如果这不是确切的解决方案,希望它足以让你指向正确的方向。
2楼
lebrot
0
2011-04-21 23:18:37
加载控件后,请检查ID控件By Firebug或仅查看HTML的来源,因为当您放入其他控件时,某些控件会在渲染时更改其ID。 如果可以的话,也可以编写htmnl代码的代码。
3楼
santosh singh
0
2011-05-25 12:34:46
试试这个(在Page_ClientValidation函数中传递组名作为参数)
Page_ClientValidation("group")
4楼
VMAtm
0
2011-05-25 12:40:20
试试这个:
newValidator.ControlToValidate = fieldRenderingControl.ClientID;
5楼
Breno Mansur Rabelo
0
2011-05-27 15:31:27
而不是Page_ClientValidate(),使用:
ValidatorValidate("id of field rendering control");
但是,在您的一个回复中,此ID是“Field_4a4ab3a1-d5cc-4fbb-a212-ec5697827c75”,这不是有效的客户端ID。 连字符不能使用。 首先,确保客户端中的有效ID。
6楼
Iván Javier Londo?o Rueda
0
2011-06-15 22:39:20
也许这篇文章太晚了......但这里有一些想法......
有几种可能的东西:
(1)验证器和要验证的控件是否在同一个面板中?
在验证完成时,可能存在隐藏的面板。
(2)如果你是动态创建的,那么这个创建是否放在了Page Load上?
如果是这样,是在第一次验证输入的函数中创建的?
可能没有必要这样做。
(3)使用受保护的覆盖void CreateChildControls()最终不会在所有重新加载过程中运行,特别是如果ViewState在某些控件中发生更改。
您可以将它放在页面加载中。
(4)其他替代方法是将按钮放在Panel中,但是visible属性= false以及验证器,属性enabled = false。
当您运行该操作时,您可以更改这两个状态,并且可以使用PostBack。