我从asp:tabcontainer更改为bootstrap nav-tabs
<div id="Tabs2" runat="server" role="tabpanel">
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#card" aria-controls="card" role="tab" data-toggle="tab" tabindex="0">Card</a></li>
<li><a href="#term" aria-controls="term" role="tab" data-toggle="tab" tabindex="1">Term</a></li>
<li><a href="#account" aria-controls="account" role="tab" data-toggle="tab" tabindex="2">Account</a></li>
<li><a href="#counter" aria-controls="counter" role="tab" data-toggle="tab" tabindex="3">Counter</a></li>
<li><a href="#allsust" aria-controls="allsust" role="tab" data-toggle="tab" tabindex="4">All Suspect</a></li>
</ul>
</div
然后我只需要从html获取tabindex来检查条件 这是我的asp:tabcontainer
的代码Protected Sub imgPrev_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles imgPrev.Click
GridView1.PageIndex = 0
TextDate.Text = Func.Date2YYMMDD(DateAdd(DateInterval.Day, -1, BizFunc.YYMMDD2Date(TextDate.Text)))
Select Case TabContainer1.ActiveTabIndex
Case 0 : btnSearchCard_Click(sender, e)
Case 1 : btnSearchTerm_Click(sender, e)
Case 2 : btnSearchAccount_Click(sender, e)
Case 3 : btnSearchCounter_Click(sender, e)
Case 4 : btnSearchSuspect_Click(sender, e)
End Select
End Sub
我尝试使用Tabs2.attribute
,但我不知道接下来应该做什么
答案 0 :(得分:2)
除非具有<a>
属性,否则无法从ASP.NET中的服务器访问链接标记runat="server"
。您可以选择以下选项:
<ASP:Hyperlink>
标记代替<a>
标记。如果您不介意让ASP为您呈现标记,只需使用其原生超链接控件即可。
PROS:您可以使用CssClass和javascript,CSS等组合从服务器和客户端访问和操作元素。
缺点:标签确实会由服务器呈现,因此如果您有一名前端工程师与您合作,如果他想修改布局,他可能会处于不利地位。 / p>
在每个列表项中创建一个<ASP:HiddenField>
,其值等于相应<a>
属性的tabindex。
PROS :您可以使用javascript来设置HiddenField的值,因此如果您动态构建字段,则可以解决问题。此外,不需要像选项#1那样进行服务器端元素渲染。如果你对javascript不错,这实际上可能是最优雅的解决方案。
缺点:服务器访问的实际tab-index属性将与其对应的<a>
标记分离。这最多是在该页面上工作时要记住的另一个警告,最坏的情况是稍后会导致意外行为,异常,构建错误(可能不是)等。
runat="server"
属性。这将允许服务器查看和访问该元素(尽管您可能必须使用一个或两个DirectCast函数)。我将在本答案的末尾添加一些代码,其中显示了一个没有转换函数的方法。
PROS:简单。可能会完成你在这个特定情况下尝试做的事情。
缺点:在HtmlGenericControls中包装服务器控件时存在一些警告,因此如果您决定使用前端代码执行更多操作,则必须牢记这一点。为避免这种情况,您可能需要将<div>
包装器更改为<asp:PlaceHolder>
标签 - 我认为无论如何都会将其呈现为div。
如果您想使用选项#3,以下是演示如何操作的说明:
<强> HTML 强>
<asp:PlaceHolder runat="server" ID="test_PH">
<ul id="test_UL">
<li><a id="link1_undetectable" href="#" tabindex="0">Tab 0 - This will not be detected.</a></li>
<li><a id="link2_undetectable" href="#" tabindex="1">Tab 1 - This will not be detected.</a></li>
<li><a id="link3_undetectable" href="#" tabindex="2">Tab 2 - This will not be detected.</a></li>
<li><a id="link4_undetectable" href="#" tabindex="3">Tab 3 - This will not be detected.</a></li>
<li><a id="link5_undetectable" href="#" tabindex="4">Tab 4 - This will not be detected.</a></li>
<li><a id="link6" href="#" runat="server" tabindex="5">Tab 5</a></li>
<li><a id="link7" href="#" runat="server" tabindex="6">Tab 6</a></li>
<li><a id="link8" href="#" runat="server" tabindex="7">Tab 7</a></li>
<li><a id="link9" href="#" runat="server" tabindex="8">Tab 8</a></li>
<li><a id="link10" href="#" runat="server" tabindex="9">Tab 9</a></li>
</ul>
</asp:PlaceHolder>
<强> VB.NET 强>
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim ph As PlaceHolder = test_PH, sb As New StringBuilder() ' The string builder is just for demonstration purposes.
For Each c As HtmlAnchor In ph.Controls.OfType(Of HtmlAnchor)() ' This will loop through the HtmlAnchors without throwing an exception.
sb.AppendLine(String.Format("ID: ""{0}""; Tab-index: ""{1}""", c.ID, c.Attributes("tabindex"))) ' This builds a string for demo purposes.
Next
MsgBox(sb.ToString) 'Show the string for demo purposes.
End Sub
结果......
答案 1 :(得分:0)
只能在asp代码中直接访问服务器端控件。所以你有几个选择。