如何从ASP / vb.net Code Behind获取html属性

时间:2015-03-09 03:23:11

标签: 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,但我不知道接下来应该做什么

2 个答案:

答案 0 :(得分:2)

除非具有<a>属性,否则无法从ASP.NET中的服务器访问链接标记runat="server"。您可以选择以下选项:


1。使用<ASP:Hyperlink>标记代替<a>标记。

如果您不介意让ASP为您呈现标记,只需使用其原生超链接控件即可。

PROS:您可以使用CssClass和javascript,CSS等组合从服务器和客户端访问和操作元素。

缺点:标签确实会由服务器呈现,因此如果您有一名前端工程师与您合作,如果他想修改布局,他可能会处于不利地位。 / p>


2。使用Veena的解决方案并将属性值存储在HiddenField

在每个列表项中创建一个<ASP:HiddenField>,其值等于相应<a>属性的tabindex。

PROS :您可以使用javascript来设置HiddenField的值,因此如果您动态构建字段,则可以解决问题。此外,不需要像选项#1那样进行服务器端元素渲染。如果你对javascript不错,这实际上可能是最优雅的解决方案。

缺点:服务器访问的实际tab-index属性将与其对应的<a>标记分离。这最多是在该页面上工作时要记住的另一个警告,最坏的情况是稍后会导致意外行为,异常,构建错误(可能不是)等。


3。向链接元素添加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

结果......

Results

答案 1 :(得分:0)

只能在asp代码中直接访问服务器端控件。所以你有几个选择。

  1. 添加runat =&#34;服务器&#34;&#39;标记中的属性使控件成为服务器端控件。
  2. 使用JavaScript将属性值保存到隐藏的表单字段中,单击按钮时可以提交该字段。