获取ASP.NET WebForms控件的所有HTML属性

时间:2013-11-25 18:04:13

标签: asp.net vb.net angularjs webforms

我们的应用程序使用一些自定义控件,其中一些控件生成了一些相当复杂的HTML输出。我们现在开始使用AngularJS,它使用自己的HTML属性,如ng-hide=""ng-show=""

我希望能够结合使用这些东西,以防止我们手动写出控件内的所有HTML,维护属性的intellisense,并在as-上添加额外的ng-*属性需要的基础。

假设我有一个名为button的控件,它上面有一堆自定义属性。我想在像这样的角度页面上使用它:

<MyControl:Button runat="server" Text="Save" state="Success" ng-show="CanBeSaved()" ng-click="Save()" />

并输出以下HTML

<button id="ctrl_1234" class="btn btn-success" ng-show="CanBeSaved()" ng-click="Save()">Save</button>

在控件内部,如何获取所有属性(即使是控件不知道的属性)并仅添加与角度相关的属性?

我的第一次尝试/伪代码

Dim sb = New StringBuilder
Dim attrs = Me.Attributes.Keys

For Each a As String In attrs
    If a.StartsWith("ng-") Then
        sb.Append(" " + a)
    End If
Next

1 个答案:

答案 0 :(得分:2)

我为Page_Load提供了一个简单的功能,它将列出ASP Properties&amp; HTML属性,如果这将对您有所帮助。我假设如果你以迭代形式看到它们会解决你的问题吗?

Public Sub PageLoad() Handles Me.Load

    ' source:
    ' http://msdn.microsoft.com/en-us/library/system.componentmodel.bindableattribute%28v=vs.110%29.aspx

    ' Show server-side properties
    Dim attributes = System.ComponentModel.TypeDescriptor.GetProperties(ControlID) ' Your Control ID
    For Each item As System.ComponentModel.PropertyDescriptor In attributes

        System.Diagnostics.Debug.Print("Name=" & item.Name)
        System.Diagnostics.Debug.Print("Category=" & item.Category)

        ' You could only show certain category if you specify property categories like:
        ' <Category("MyCategory")> _

        If item.Category = "MyCategory" Then
        End If

    Next

    ' source:
    ' I used your existing code to iterate the collection & print
    ' SHow HTML attrs
    Dim attrs As System.Web.UI.AttributeCollection = ControlID.Attributes ' Your Control ID
    For Each a As String In attrs.Keys
        System.Diagnostics.Debug.Print(a & "=" & attrs(a))
    Next

End Sub