2011-11-29 78 views
1

UPDATE的RegisterStartupScript在用户控制不重新加载/改写的Javascript

问题的总结:

  1. 有6个动态UCS其中产生并且每个都有其自己的自定义JS将其注入在页面上使用RegisterStartUpScript初始化的UC

  2. 只有第一次生成第一个UC的父页面将脚本正确放置在页面的底部。

  3. 在后续部分更新(AJAX调用),以生成新的UC,相关的脚本不注入......

我会继续搜索并尝试不同的东西,但如果有人能指导我将不胜感激 谢谢!

下面是完整的解释

我有使用其中RadScriptManager定义硕士(Telerik的脚本管理)父页面。父页面有一个占位符,用于生成动态用户控件。 UC有一个javascript,我在UC的Page_Init上注入。

当我第一次调用它时,第一页加载,脚本正常工作..我可以在Chrome调试器中的源代码中看到它。当我更改父母上的ddl时,它会调用并在占位符内生成另一个UC。后者有自己的Javascript注入类似的第一个生成...两个UC基本上是每个省的意见,所以它具有相同的结构,但形式内容略有不同...

问题是,当我查看Chrome调试器,我看到用户COntrol内容的部分更新,但是我没有看到第二个控制器的新脚本,它应该被添加到UC的Page_Init的add_load上。所以每次我改变控制,它调用前面的脚本......虽然我的代码通过下面的部分......这基本上是为正在加载的给定控件注册适当的脚本。

在下面的例子中,我总是看到一条警告“SK cmbSearch = ..”,而不是“ON cmbSearch = ...”,这是我正试图加载的当前省份。

任何人都可以给我一些指针吗?

public void RegisterSearchVisibilityPPSA() 
{ 
string jsFunction = 
@"function DefineView(sender, eventArgs) { 
    var comboSearch = $find('%%cmbSearchType%%'); 
    //cmbSearch Section 
    alert('ON cmbSearch = %%cmbSearchType%% with value = ' + comboSearch.get_selectedItem().get_value()); 
    switch (comboSearch.get_selectedItem().get_value()) { 
     //PER 
     case 'IN': 
     case 'IS' : 
      $('#tblPersonSearchForm').show(); 
      $('#tblPersonDOBSearchForm').show(); 
      $('#tblBusinessSearchForm').hide(); 
      $('#tblSerialNumberedSearchForm').hide(); 
      break; 
     //BUS 
     case 'BD': 
      $('#tblPersonSearchForm').hide(); 
      $('#tblPersonDOBSearchForm').hide(); 
      $('#tblBusinessSearchForm').show(); 
      $('#tblSerialNumberedSearchForm').hide(); 
      break; 
     //SER 
     case 'MVE': 
     case 'MVS': 
      $('#tblPersonSearchForm').hide(); 
      $('#tblPersonDOBSearchForm').hide(); 
      $('#tblBusinessSearchForm').hide(); 
      $('#tblSerialNumberedSearchForm').show(); 
      break; 
     //REG 
     case 'REG': 
     default: 
      $('#tblPersonSearchForm').hide(); 
      $('#tblPersonDOBSearchForm').hide(); 
      $('#tblBusinessSearchForm').hide(); 
      $('#tblSerialNumberedSearchForm').hide(); 
      $('#tblRegistrationNumberedSearchForm').show(); 
      break; 
    } 


} 

function onPageLoad(){ 
    // jquery Area 
    $(document).ready(function() { 
     DefineView(); 
    }); 
} 
"; 


RadScriptManager.RegisterStartupScript(this, this.GetType(), "ON_SearchVisibilityPPSA",jsFunction.Replace("%%cmbSearchType%%", cmbSearchType.ClientID), cmbRegistrationType.ClientID), true); 
string onLoadScript = @" Sys.Application.add_load(function(){ onPageLoad();}) "; 
RadScriptManager.RegisterStartupScript(this, this.GetType(), "ON_onLoadScript", onLoadScript, true); 
} 
+0

我设法通过确保脚本的键名是独一无二的...所以在回发和部分回帖后,新的javascript写入... – Gotcha

+0

小心使用加载事件处理程序(add_load功能)。订阅保留部分回发,所以处理程序可以很容易[注册多次](http://jakub-linhart.blogspot.com/2012/04/script-registration-labyrinth-startup.html)。 –

回答

0

在一个Ajax请求,我认为你应该使用RadAjaxPanel.ResponseScripts.Add(脚本)。