2010-08-17 48 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