2010-08-17 58 views
3

有兩個用戶控件,一個在另一箇中。強制網頁上的用戶控件重新初始化iteself

這些控件位於.aspx上。

一個控件是模式彈出窗口另一個是自定義搜索控件(搜索控件位於模式彈出窗口內)。

用戶完成搜索並關閉表單後,下次彈出窗口打開時(對於同一用戶)舊值仍然存在。

如何在每次載入表單時清除值?

編輯: 是否有可能捕獲彈出關閉事件?

回答

2

事實證明,在控制上沒有方法清除控件上的值。

所以我要做的就是在搜索控件上創建方法來清除控件並在彈出控件上創建一個方法來捕獲彈出的打開或關閉事件以觸發清除方法。

起初我不能改變控制..因爲解釋說這是解決問題的唯一方法,控制可以改變..感謝上帝!由於該方法不會成爲默認選項,因此不會影響其他控件的使用。

3

你可以清除使用Javascript成爲這裏的所有值是一個例子使用jQuery:

http://beckelman.net/post/2008/09/24/Clear-Input-Fields-in-an-AjaxControlToolkit-ModalPopup-When-Cancel-is-Clicked.aspx

+0

聽起來不錯..你知道,如果這將工作類似的一組asp:RegularExpressionValidator的?我也需要重置它們的值,將它們設置爲至少爲真。 – Avien 2010-08-17 18:30:34

+0

好吧,如果他的例子按照它應有的方式工作,那本來就不錯。他的例子沒有做它所說的..所以我想這個例子是不準確的.. – Avien 2010-08-17 22:29:11

+0

真的所有的例子是做清除輸入字段。更簡單地說,你可以這樣做: $('#myTexboxId')。val(''); 對於您想要清除的每個輸入。隨着asp.net自動ID,它變得更加複雜,但這完全是另一個問題。 重置驗證器就是一樣簡單: $('。validatorErrorMessageClass')。remove(); – automagic 2010-08-17 23:32:09

1

假設該用戶控件已與它相關的一些客戶端的JS代碼,我會修改控制清除在關閉模式彈出窗口之後取出搜索值和結果。

這將確保當模式彈出窗口重新打開時,其處於新搜索的正確狀態。

Sys.Application.add_init在這種情況下不起作用,因爲這隻會在加載頁面時運行一次。

當模型彈出被取消或關閉時,您需要編寫一些新的JS。

在這裏修改控件將是您的最佳選擇,所以使用此控件的所有其他頁面都可以利用新的重置功能。

目前很難在不知道頁面結構,用戶控件和任何現有的JavaScript的情況下給出更多具體信息。

+1

與此相關的主要問題是控件在大多數其他頁面上未包含在modalpopup中(我將編輯帖子以反映此內容),它直接在頁面上。我不想清除在其他地區使用這個控件的結果 – Avien 2010-08-17 18:36:53

3

對於我目前維護的應用程序之一,我們使用遞歸函數來重置控件中的所有字段。我在下面添加了它,但請記住它用於C#Windows應用程序而不是Web應用程序。希望能幫助到你。

public static void ResetFields(Control.ControlCollection pageControls) 
    { 
     foreach (Control contl in pageControls) 
     { 
      var strCntName = (contl.GetType()).Name; 
      switch (strCntName) 
      { 
       case "Button": 
        contl.Enabled = true; 
        break; 
       case "TextBox": 
        var txtSource = (TextBox)contl; 
        txtSource.Text = ""; 
        break; 
       case "ListBox": 
        var lstSource = (ListBox)contl; 
        lstSource.SelectedIndex = -1; 
        lstSource.Enabled = true; 
        break; 
       case "ComboBox": 
        var cmbSource = (ComboBox)contl; 
        cmbSource.SelectedIndex = -1; 
        cmbSource.Enabled = true; 
        break; 
       case "DataGridView": 
        var dgvSource = (DataGridView)contl;  
        dgvSource.Rows.Clear(); 
        break; 
       case "CheckBox": 
        var chkSource = (CheckBox)contl; 
        chkSource.Checked = false; 
        chkSource.Enabled = true; 
        break; 
      } 
      ResetFields(contl.Controls); 
     } 
    } 
+0

這將是一個很好的解決方案,但我不想在彈出窗口關閉時回發 – Avien 2010-08-17 18:32:43

+0

@Lee這可能不會在表單被使用時被加載?只是爲了清除每個字段 – Gage 2010-08-17 18:37:52

+0

這不是想在其他地方使用控制。否則,這將是偉大的 – Avien 2010-08-18 18:51:10