2009-05-12 4 views
5

Sto provando a creare una vista fortemente tipizzata utilizzando Visual Studio 2008. Posso fare clic con il pulsante destro del mouse su un'azione del controller e scegliere: Aggiungi vista ... Nella finestra di dialogo successiva c'è un'opzione 'Crea una vista fortemente tipizzata '. Se controllo questa opzione, posso selezionare un elenco di classi presenti nel mio progetto corrente.ASP.NET MVC - Come creare una vista fortemente tipizzata dalle classi nella libreria di classi di riferimento?

Tuttavia non riesco a selezionare la classe di cui ho bisogno che si trova in una libreria di classi a cui ho fatto riferimento.

  • Classlibrary è un assembly fortemente tipizzato che viene caricato nel GAC.
  • Ovviamente la libreria è referenziata nel progetto.
  • Ho una < add namespace = "namespace"/> in web.config
  • Ho ricostruito più volte, ed ho ricominciato VS
  • ClassLibrary non ha alcun problema ...

Qualche suggerimento?

+0

Qualche soluzione? per favore aggiorna qui –

risposta

3

Basta creare la vista con una qualsiasi delle classi del modello, quindi modificare manualmente l'ASPX e sostituire la classe del modello con quella che si desidera. Probabilmente la finestra di dialogo non è abbastanza intelligente.

Ma secondo la mia opinione personale, usare le classi "esterne" come modelli è molto sbagliato.

Tutti i modelli, le visualizzazioni e i controller devono essere qui, direttamente nel progetto. Possono quindi utilizzare internamente tutto ciò di cui hanno bisogno, ovunque si trovi.

+0

Sono d'accordo che non dovrei usare le classi esterne. Tuttavia questo -davviene-. È un classibrebrario di sola lettura che ha built-in collezioni ed entità. Mi piace il tuo suggerimento di sostituire manualmente, ma questo non funziona, ricevo probabilmente un errore di compilazione perché l'ereditarietà è incasinata: "Titolo" non è un membro di "ASP.views_home_list_aspx" – Ropstah

+0

L'errore che ho ricevuto non è correlato a la mia domanda. Il tuo suggerimento funziona. Grazie! – Ropstah

0

Non sono sicuro che le mie classi vengano visualizzate nell'elenco oppure no, di solito le digito (a partire dallo spazio dei nomi di root). Cosa succede se provi a digitare, ad esempio, MyRootNamespace.MyClassLibrary.MyNamespace.AnotherNamespace.TheClass nella casella di testo e fai clic su OK?

+0

Posso digitare manualmente il nome della classe compresi gli spazi dei nomi, tuttavia il menu a discesa del contenuto della vista è quindi disabilitato ... – Ropstah

0

posso digitare manualmente il nome di classe compresi gli spazi dei nomi, tuttavia il contenuto discesa vista è quindi disattivato ... - ropstah 12 maggio alle 13:31

Sto avendo lo stesso problema con le mie Classi di dati personalizzate. Vengono visualizzati nel menu a discesa "Visualizza classe dati" ma il menu a discesa "Visualizza contenuto" è disattivato. Immagino che le mie classi debbano implementare qualche interfaccia. Non sono sicuro di quale.

+0

Si potrebbe voler controllare questo: http://msdn.microsoft.com/en-us/library/aa697427(VS.80) .aspx. Uno strumento ORM molto valido è Entityspaces, www.entityspaces.com – Ropstah

7

Questo è sicuramente troppo tardi per rispondere a questa domanda, ma per i futuri lettori:

ho notato che molto spesso devo Build-> soluzione pulita e poi a Build-> ricostruire la soluzione e appaiono magicamente le classi (come dovrebbero)

+0

Mentre non sono sicuro che questa particolare risposta risolva la domanda come posta, risolve il mio problema principalmente correlato, quindi grazie! – lassombra

+0

@lassombra Per lo più sei il benvenuto! –

1

questo è stato inviato molto tempo fa, ma la mia soluzione potrebbe aiutare qualcuno ....

ho appena avuto questo stesso problema e ho scoperto che se ho avuto "controller", come parte della classe name - Avevo un "DoorController" - Non riuscivo ad aggiungerlo tramite la selezione della vista fortemente tipizzata. Mi ha anche causato altri problemi in asp mvc.

Questo potrebbe valere anche per "Modello" e "Visualizza"? Prova a cambiare il nome della classe del tuo modello per risolvere questo problema.