Кажется, что 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, и многие созданные в средствах управления используют их в большой степени.
Я ничего не могу найти об этом, но я не могу полагать, что это не довольно фундаментальная потребность. Там какой-либо путь состоит в том, чтобы заставить это работать?
Чтобы обеспечить надлежащий 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")
.
У меня та же проблема очень часто, даже при работе в asp.net mvc 2. Обычно я просто набираю код вне класса (где работает intellisense), а затем просто переношу этот кусок текста в атрибут :S
.