ASP.NET Intellisense не работает в атрибутах - PullRequest
11 голосов
/ 25 мая 2010

Кажется, что 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 просто работает в теле div, нонезависимо от того, что я делаю, это не будет работать, чтобы установить этот атрибут класса.Это очень раздражает, так как атрибуты довольно фундаментальны в HTML, и многие из встроенных элементов управления интенсивно их используют.

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

Ответы [ 4 ]

3 голосов
/ 01 октября 2010

Это очень плохо , что Visual Studio 2008/2010 не справляется с этим. Я искренне надеюсь, что это произойдет в следующем выпуске. Однако есть расширения, которые здесь помогают.

Только что попробовал Решарпер по этой конкретной причине и обнаружил, что он очень помогает. Теперь и проверка синтаксиса, и IntelliSense в моих строках атрибутов: -) . Я предполагаю, что есть другие расширения Visual Studio, которые делают это также, еще не пробовали. (Resharper стоит некоторых, но у них есть альтернативные бесплатные лицензии для академических разработчиков и разработчиков с открытым исходным кодом.)

2 голосов
/ 03 августа 2010

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

1 голос
/ 25 мая 2010

Чтобы обеспечить правильную 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

Вам также следует рассмотреть возможность использования <asp:Label> вместо <div>. Тогда вы можете использовать свойство .CssClass вместо .Attributes("class").

0 голосов
/ 30 ноября 2011

Я не уверен, что это действительно считается ответом, но: я переключил все новые разработки на Razor, который исправляет эту проблему и намного лучше во многих других отношениях. В частности, проверка времени компиляции в целом намного лучше, что облегчает обнаружение проблем в конструкторе, а не во время выполнения.

Опять же, не совсем ответ для разработки WebForms, но, по крайней мере, сейчас есть другой движок представления.

...