ASP.NET Intellisense не работает в атрибутах

Кажется, что Intellisense просто не работает в атрибутах на странице ASP.NET. Мне действительно нравится строгий контроль типов, потому что мне нравится Intellisense, и таким образом, я обычно удостоверяюсь, что связал с объектом со строгим контролем типов в ASP.NET:

<Repeater ID="rep" runat="server">
  <ItemTemplate>
    <div id="mydiv" class="<%# TypedObject.Class  %>" runat="server">
      <%# TypedObject.Name %>
    </div>
  </ItemTemplate>
</Repeater>

Intellisense просто работает в теле отделения, но независимо от того, что я делаю он не будет работать для установки того атрибута класса. Это является очень раздражающим, так как атрибуты довольно фундаментальны в HTML, и многие созданные в средствах управления используют их в большой степени.

Я ничего не могу найти об этом, но я не могу полагать, что это не довольно фундаментальная потребность. Там какой-либо путь состоит в том, чтобы заставить это работать?

11
задан Joshua Frank 25 May 2010 в 13:49
поделиться

2 ответа

Чтобы обеспечить надлежащий Intellisense и сильную типизацию, поместите код привязки к базе данных в файл кода, а не в страницу ASPX. Вы обнаружите, что ваши приложения гораздо легче поддерживать, если/когда ваш типизированный объект изменится. Единственное "желтое", что вы должны видеть в вашей ASPX-странице, находится в верхней части.

Ваш ретранслятор должен выглядеть следующим образом...

<asp:Repeater ID="rep" runat="server">
    <ItemTemplate>
        <div id="mydiv" runat="server" />
    </ItemTemplate>
</asp:Repeater>

Ваш файл кода должен выглядеть следующим образом...

Option Explicit On
Option Infer On
Option Strict On

'Replace this class with your custom typed object'
Public Class TypedObject
    Public [Class] As String
    Public [Name] As String

    Sub New(ByVal NewClass As String, ByVal NewName As String)
        Me.Class = NewClass
        Me.Name = NewName
    End Sub    
End Class


Partial Class _Default
    Inherits System.Web.UI.Page

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'Creating sample data and binding it to the repeater'
        Dim aData() As TypedObject = {New TypedObject("Class1", "Name1"), New TypedObject("Class2", "Name2")}

        rep.DataSource = aData
        rep.DataBind()
    End Sub

    Private Sub rep_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rep.ItemDataBound
        'Do not process headers/footers/separators'
        Select Case e.Item.ItemType
            Case WebControls.ListItemType.Item, WebControls.ListItemType.AlternatingItem
            Case Else
                Exit Sub
        End Select

        'Aquire our datasource for this row'
        Dim dr = DirectCast(e.Item.DataItem, TypedObject)

        'Aquire the control to bind (Do this for each control you are binding)'
        Dim mydiv = DirectCast(e.Item.FindControl("mydiv"), HtmlGenericControl)

        'bind the control'
        mydiv.InnerHtml = dr.Name
        mydiv.Attributes("class") = dr.Class

    End Sub
End Class

Вам также следует рассмотреть возможность использования вместо

. Тогда вы сможете использовать свойство .CssClass вместо .Attributes("class").

1
ответ дан 3 December 2019 в 11:20
поделиться

У меня та же проблема очень часто, даже при работе в asp.net mvc 2. Обычно я просто набираю код вне класса (где работает intellisense), а затем просто переношу этот кусок текста в атрибут :S

.
2
ответ дан 3 December 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: