我从 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
,但我不知道下一步应该做什么
最佳答案
您无法访问链接标签<a>
来自 ASP.NET 中的服务器,除非它具有 runat="server"
属性。以下是您的选择:
1。使用<ASP:Hyperlink>
标签而不是 <a>
标签。
如果您不介意让 ASP 为您呈现标签,则只需使用其 native 超链接控件即可。
优点:您可以使用 CssClass 和 javascript、CSS 等的组合从服务器端和客户端访问和操作元素。
缺点:标签确实是由服务器渲染的,所以如果你有一个前端工程师和你一起工作,如果他想修改布局,他可能会处于不利地位。
2。使用 Veena 的解决方案并将属性值存储在 HiddenField 中
创建 <ASP:HiddenField>
在每个列表项内,其值等于相应 <a>
的 tabindex属性。
优点:您可以使用 JavaScript 来设置 HiddenField 的值,因此如果您动态构建该字段,那么它会起作用。此外,不需要像选项 #1 那样进行服务器端元素渲染。如果您精通 javascript,这实际上可能是最优雅的解决方案。
缺点:服务器访问的实际选项卡索引属性将与其相应的 <a>
分离。标签。这充其量只是在该页面上工作时要记住的额外警告,最坏的情况是稍后会导致意外行为、异常、构建错误(可能不会)等。
3。添加runat="server"
链接元素的属性。
这将允许服务器查看和访问该元素(尽管您可能必须使用一两个 DirectCast 函数)。我将在此答案的末尾添加一些代码,这些代码显示了没有转换函数的方法。
优点:简单。可能会完成您在这种特定情况下尝试做的事情。
缺点:将服务器控件包装在 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
结果...
关于html - 如何从 ASP/vb.net Codebehind 获取 html 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934788/