我正在使用Telerik UI for asp.net。具体来说,我使用RadTabStrip和部分页面回发来允许用户标记不同的数据集。当用户单击选项卡时,某些代码会执行并仅为该选项卡加载数据。
我已经弄明白了如何执行代码隐藏:我设置了RadTabStrip的 OnTabClick 属性,然后在代码隐藏中检查点击了哪个标签。
E.g。
protected void tab_Click(object sender, RadTabStripEventArgs e)
{
if (e.Tab.Text == "Info")
{
populateInfoTab();
}
}
private void populateInfotab()
{
// Do some stuff
}
但是,我无法弄清楚如何在单击特定标签后执行客户端javascript 。我尝试了什么:
设置 OnClientTabSelected 属性,然后添加一些javascript:
function tab_ClientClick(sender, args)
{
var tab = args.get_tab();
if(tab.get_text() == "Info")
{
alert("Tab Clicked");
}
}
问题是我需要在单击后点击的网页浏览中设置某个div的InnerHtml。页面加载时不存在div(特定的RadPageView被隐藏),所以我无法设置它。用户点击标签后,加载页面视图后,我需要能够通过JavaScript更新div的InnerHtml。
我将如何做到这一点?
答案 0 :(得分:1)
第一个选项 - 如果你不设置RenderSelectedPageOnly property to true,所有页面视图都会在初始加载时呈现,您将能够使用JS查找/修改其中的元素。
第二个选项 - 只需在加载UC后立即从服务器设置内容,这通常会使事情变得更简单。
第三个选项 - 使用客户端事件(由本机PageRequestManager类或RadAjaxManager提供,具体取决于您设置AJAX交互的方式)在收到响应时执行。这里的困难是确定你需要的回发。寻找所需的元素,只有执行逻辑(如果存在)是您可以选择的最简单的标志。
第四个选项 - 从将调用您的函数的服务器代码中注册一个脚本,如:
populateInfoTab();
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "someKey", "myDesiredFunction()", true);
您可能希望使用Sys.Application.Load来确保它在IScriptControl初始化之后执行。