html - 如何从 ASP/vb.net Codebehind 获取 html 属性

标签 html asp.net vb.net twitter-bootstrap

我从 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

结果...

Results

关于html - 如何从 ASP/vb.net Codebehind 获取 html 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934788/

相关文章:

html - Bootstrap 不右对齐我的 DIV - 向右拉不工作

javascript - 3D CSS3 风景的自动大小 - 计算 3D DIV 的像素大小?

Asp.Net 元素不从 Css 文件获取样式属性

asp.net - Microsoft.VisualBasic.Financial.Rate 错误, "Cannot calculate rate using the arguments provided"

html - visual studio 代码 - 如何评论 html 的多行(每行而不是整个 block )

javascript - WebRTC:createOffer 的成功回调在 Chrome 中调用了两次

asp.net - 你如何在文本框或谷歌搜索下拉结果等输入控件中填充 sql 查询结果

javascript - Facebook Javascript SDK : Event auth. sessionChange 和 auto.logout 仅在页面刷新时触发

.net - 将 Windows 服务类添加到类库

vb.net - 如何在 VB.NET 中使用 Rhino Mocks 模拟方法(自定义行为)