2011-03-30 56 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。

相關問題