UPDATE
问题总结:
-
有6个动态UCs生成,每个都有自己的自定义JS,使用RegisterStartUpScript在UC
的Page Init上注入 只有第一次生成第一个UC的父页面才会将脚本正确地放置在页面的底部。
在随后的部分更新(AJAX调用)中生成新的UC,不注入相关的脚本…
以下是完整的解释
我有一个使用Master的父页面,其中定义了RadScriptManager (telerik的脚本管理器)。父页面有一个占位符,用于生成动态用户控件。UC有一个javascript,我在UC的Page_Init上注入。
当我第一次调用它时,第一个页面加载,脚本工作正常。我可以在Chrome调试器的源代码上看到它。当我更改父对象上的ddl时,它将调用并在占位符内生成另一个UC。后者有自己的Javascript注入类似于第一个生成…这两个UC基本上是每个省的视图,所以它有相同的结构,但形式内容略有不同…
问题是,当我查看Chrome调试器时,我看到了用户控件内容的部分更新,但我没有看到应该添加到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);
}
对于Ajax请求,我认为您应该使用radajaxpanel . responsesscripts . add (script).