更新
问题摘要:
生成了6个动态UC,每个动态UC都有自己的自定义JS,使用UC的Page Init上的RegisterStartUpScript注入
只有第一次生成第一个UC的父页面才能将脚本正确放置在页面底部。
在后续的部分更新(AJAX调用)中生成新的UC,不会注入相关的脚本......
我会继续搜索并尝试不同的东西,但如果有人可以指导我,我将不胜感激 谢谢!
以下是完整说明
我有一个使用Master的父页面,其中定义了RadScriptManager(telerik的脚本管理器)。父页面有一个占位符,用于生成动态用户控件。 UC有一个javascript,我注入了UC的Page_Init。
当我第一次调用它时,第一页加载,脚本正常工作..我可以在Chrome调试器的源代码中看到它。当我在Parent上更改ddl时,它会调用并在占位符中生成另一个UC。后者有自己的Javascript Inject类似于第一个生成的...两个UC基本上都是每个省的视图所以它具有相同的结构但形式内容略有不同......
问题是,当我查看Chrome调试器时,我看到User COntrol内容的部分更新,但我没有看到第二个控件中的新脚本应该添加到Page_Init上的add_load UC。所以每次,我改变控制,它调用前面的脚本......虽然我的代码通过下面的部分...这基本上是为正在加载的给定控件注册适当的脚本。
在下面的例子中,我总是看到一个警告“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 :(得分:0)
根据Ajax请求,我认为您应该使用RadAjaxPanel.ResponseScripts.Add(脚本)。