ASP.NET动态增加TabPanel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET动态增加TabPanel相关的知识,希望对你有一定的参考价值。
左边是树,右边是TabContainer,点击左边树节点怎么才能在TabContainer增加TabPanel,我会用树运行JS函数,但JS函数不知道怎么写才能增加TabPanel,求高手指点。代码如下:
<body>
<form id="form1" runat="server">
<table width="100%" height="100%" border="3" cellpadding="0" cellspacing="0">
<tr>
<td width=170 id="frmTitle" align="center" valign="top" background="Images/mainbg.gif" >
<asp:TreeView ID="TreeView1" runat="server">
</asp:TreeView>
</td>
<td width=8 valign="middle" style="background:url(Images/bthdbg.gif) repeat-x center top ;" onclick="switchSysBar()"><span class="navPoint"
id="switchPoint" title="关闭/打开左栏" style="cursor:hand"><img src="Images/bthd.gif" name="img1" width=7 height=58 id=img1></span>
</td>
<td align="center" valign="top">
<div id="div1">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<cc1:TabContainer ID="tabs" runat="server" ActiveTabIndex="0" >
<cc1:TabPanel runat="server" HeaderText="我的工作台1" closable="False" ID="TabPanel3" TabIndex="0">
<ContentTemplate>
<iframe src="top.aspx" frameborder="0"></iframe>
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel runat="server" HeaderText="我的工作台2" closable="False" ID="TabPanel4" TabIndex="0">
<ContentTemplate>
<iframe src="tab.aspx" frameborder="0"></iframe>
</ContentTemplate>
</cc1:TabPanel>
</cc1:TabContainer>
</div> </td>
</tr>
</table>
</form>
</body>
我见到网上都是这样写的:
function addTabPanel()
var tabs=$find("tabs");
var tabPanel=tabs.TabPanel;
tabPanel.add(
title:"百度",
id:"baidu",
closable:true,
autoLoad:
url: "www.baidu.com",
mode:'iframe'
).show();
但会报错,估计tabs.TabPanel也是不生效的
我改成document.getElementById("tabs")也不行,很早调试过了,用document.getElementById("tabs")可以取到tabs,但tabPanel为空,就是说tabs.TabPanel是空的,TabPanel应该没效。
R Shiny - 将tabPanel动态添加到tabsetPanel(使用renderUI)
【中文标题】R Shiny - 将tabPanel动态添加到tabsetPanel(使用renderUI)【英文标题】:R Shiny - add tabPanel to tabsetPanel dynamically (with the use of renderUI) 【发布时间】:2013-10-28 12:33:00 【问题描述】:我正在开发一个闪亮的应用程序,我在其中使用tabsetPanel
,它是在用户输入某些特定输入时生成的。因此,我想使用renderUI
函数使tabsetPanel 出现/消失。
我现在的问题是 number of tabPanel
元素(tabsetPanel
的参数)也取决于用户输入,顺便说一下:有时我需要 1 个,其他时候我想要更多tabPanels
。
如何制作?我尝试在 tabsetPanel
参数中包含 conditionPanel
或包含简单的 if()...
条件,但它(并不奇怪......)不起作用。
【问题讨论】:
【参考方案1】:给你。该代码是相当不言自明的。
library(shiny)
runApp(list(
ui = pageWithSidebar(
headerPanel('Dynamic Tabs'),
sidebarPanel(
numericInput("nTabs", 'No. of Tabs', 5)
),
mainPanel(
uiOutput('mytabs')
)
),
server = function(input, output, session)
output$mytabs = renderUI(
nTabs = input$nTabs
myTabs = lapply(paste('Tab', 1: nTabs), tabPanel)
do.call(tabsetPanel, myTabs)
)
))
【讨论】:
Ramnath,这让我很开心,效果很好!非常感谢!! 很高兴能提供帮助。如果您对代码本身有任何疑问,请在此处发布。 添加:添加选项卡后,将相同的uiOutput
添加到所有选项卡但使每个选项卡中的值唯一的正确方法是什么?或者这有什么不同?如果您添加 output$base_tab_ui
并在每个选项卡中呈现它们,则它们都为每个选项卡保留相同的 input$value
。有没有办法通过不同的输入变量名称使这些唯一?
@Ramnath 您将如何使用自己的内容填充这些动态选项卡中的每一个?也许,比如说,一个 data.frame 的 renderTable / tableOutput 可以使用我用来填充选项卡名称的相同对象进行过滤(即nTabs = length(lags_7)
和myTabs = lapply(sprintf('%s', lags_7), tabPanel)
)(此处可能的答案:***.com/questions/39276104/…)
@d8aninja,假设您将一些地块添加到名为 myPlots 的列表中,您可以这样做:nTabs = length(myPlots); myTabs = lapply(1:nTabs, function(x)tabPanel(paste0("Tab ",x), renderPlot(myPlots[[x]]))); do.call(tabsetPanel, myTabs)
【参考方案2】:
有一种方法可以动态添加tabPanels 没有 renderUI,这可能不像带有renderUI 的版本那么明显。我编写了一个函数 addTabToTabset ,它将任何(列表)tabPanel 附加到选项卡集/导航栏。
与使用 renderUI 相比,此方法具有一组优点:
现有的 tabPanel 不会在每次添加新面板时重新呈现。 (更快) 因此,不会重置现有面板中的所有输入变量。 (无需变量存储解决方法) 可以单独选择面板内容的结构。 (在 lapply - renderUI 版本中,所有面板都必须有点统一。)解决方案和代码示例可以在答案here中找到。如果需要,我也可以在此处发布代码。
【讨论】:
以上是关于ASP.NET动态增加TabPanel的主要内容,如果未能解决你的问题,请参考以下文章
用vs2010平台,c#写的asp.net网站,动态增加和减少Textbox