2010-05-25 18 views
11

Sembra che Intellisense semplicemente non funzioni all'interno degli attributi in una pagina ASP.NET. Mi piace molto tipizzazione forte, perché mi piace Intellisense, e così io in genere in modo di legarsi a un oggetto fortemente tipizzato in ASP.NET:ASP.NET Intellisense non funziona negli attributi

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

Intellisense funziona solo all'interno del corpo del div, ma non importa quale Lo faccio non funzionerà per impostare quell'attributo di classe. Questo è molto fastidioso, dal momento che gli attributi sono piuttosto fondamentali in HTML e molti dei controlli incorporati li usano pesantemente.

Non riesco a trovare nulla a riguardo, ma non posso credere che questo non sia un bisogno fondamentale. C'è un modo per farlo funzionare?

+0

Quale versione di Visual Studio stai utilizzando? –

+0

Questo è VS2008. Aggiornamento –

+0

: lo stesso problema in VS2010. Che noioso. –

risposta

0

Non sono sicuro che questo sia davvero una risposta, ma: ho cambiato tutto il nuovo sviluppo in Razor, che risolve questo problema ed è molto meglio anche in molti altri modi. In particolare, il controllo del tempo di compilazione in generale è molto meglio, rendendo più semplice rilevare i problemi nel progettista anziché in fase di esecuzione.

Ancora una volta, non è proprio una risposta per lo sviluppo di WebForms, ma almeno ora è disponibile un altro motore di visualizzazione.

1

Per garantire un corretto Intellisense e una digitazione forte, inserire il codice di associazione nel file di codice anziché nella pagina ASPX. Troverai le tue app molto più facili da supportare quando/cambierà l'oggetto digitato. L'unico "giallo" che dovresti vedere nella tua pagina ASPX è in alto.

ripetitori dovrebbe assomigliare a questo ...

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

Il file di codice dovrebbe essere simile ...

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 

Si dovrebbe anche considerare l'utilizzo di un <asp:Label> invece di un <div>. Quindi è possibile utilizzare la proprietà .CssClass anziché .Attributes("class").

+2

So che potrei farlo, ma sembra l'approccio sbagliato per diversi motivi. Sostituisce una riga di codice con almeno 10, e gran parte di quel codice sta trasmettendo e altre cose che sono molto più irritanti della mancanza originale di Intellisense. Inoltre, renderebbe molto più difficile apportare modifiche in seguito. Se volessi sostituire il ripetitore con una griglia, dovrei apportare molte modifiche non banali al codice.Ma, cosa più importante, ASP (e WPF) stanno per essere dichiarativi il più possibile, e con il minor numero possibile di codice procedurale. Questo sta andando nella direzione opposta. –

+1

Preferisco fare 10 righe di codice con intellisense, piuttosto che una riga di codice senza di essa. ASP.NET vuole davvero essere il più dichiarativo possibile? Non temere il code-behind. :-P – dave

+0

Credo che uno dovrebbe essere il più dichiarativo possibile, ma solo perché una volta che si dichiara il modello, qualsiasi * altro * posto in cui si mette qualcosa è meno strettamente accoppiato, e che lascia bugs e rende le cose più difficili capire. E quelle dieci righe di codice probabilmente lasciano spazio anche a più problemi. In realtà, hanno solo bisogno di aggiustare il progettista in modo che funzioni come dovrebbe. FWIW, il designer di WPF/Silverlight sembra aver risolto in gran parte questo tipo di problema. –

2

Ho lo stesso problema molto spesso, anche mentre lavoro in asp.net mvc 2. Di solito digito semplicemente codice al di fuori della classe (dove funziona intellisense) e quindi sposta semplicemente quel pezzo di testo in attributo. : S

+0

Sigh, è quello che faccio anch'io, ma è così folle. –

+0

Lo stesso problema qui in VS2010. Una volta tra virgolette all'interno di un attributo, non ottengo nulla. – jwsample

+0

Anche in MVC 2? :-(Non vedevo l'ora di miglioramenti in questo caso lì. – joeriks

3

È davvero scadente che Visual Studio 2008/2010 non gestisce questo. Spero sinceramente che arriverà nella prossima versione. Tuttavia ci sono estensioni là fuori che aiutano qui.

Ho appena provato Resharper per questo particolare motivo e l'ho trovato di grande aiuto. Controllo della sintassi e IntelliSense nelle stringhe di attributi ora :-). Suppongo che ci siano altre estensioni di Visual Studio che lo fanno, ma non l'ho ancora provato. (Il resharper costa alcuni, ma hanno licenze gratuite alternative per gli sviluppatori accademici e open source)

+0

Ho sentito molte cose positive su Resharper ma non l'ho mai provato, ho messo giù ASP.NET per un po ', ma quando tornerò, potrei provare. Grazie –

+0

Cheers! (Ho appena ricevuto una risposta dal supporto di Coderush su questo " Non forniamo la nostra finestra IntelliSense, ma stiamo utilizzando la finestra integrata per questo scopo, quindi temo che i nostri strumenti non possano aiutare in questa situazione. ") – joeriks

Problemi correlati