n° 219
Novembre 2017
Dicembre 12, 2017, 09:45:59 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Visual Studio 2012 e controlli custom  (Letto 3793 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
DonZaucker74
Jr. Member
**

Karma: +4/-1
Scollegato Scollegato

Messaggi: 150


Mostra profilo
« inserita:: Ottobre 16, 2012, 12:59:41 »


Ciao a tutti,

sto portando un'applicazione aspnet da visual studio 2003 a visual studio 2012.
L'applicazione utilizza controlli custom, in pratica ho esteso i controlli classici Label, Textbox,Checkbox, ecc.
Quando inserisco un controllo custom all'interno di una pagina ottengo il seguente errore:
"The base class includes the field 'lblUserName', but its type (CustomControls.Label) is not compatible with the type of control (CustomControls.Label)"

Ho creato un namespace CustomControls dentro il quale ho creato la classe Label (che estende la classe Label del framework). Il file CustomControls.vb si trova nella cartella AppCode del progetto.
Molto semplicemente:

Codice:
Option Explicit On
Option Strict On

Imports System.ComponentModel
Imports System.Drawing

Namespace CustomControls

   Public Class Label
        Inherits WebControls.Label

    End Class

End Namespace


Nel web.config ho aggiunto la dichiarazione del prefisso:
Codice:
   <controls>
     <add tagPrefix="PM" namespace="CustomControls" />
   </controls>

e nella pagina ho aggunto il controllo:
Codice:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Login.aspx.vb" Inherits="LoginPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Login</title>
</head>
<body>
    <form id="form1" runat="server">
         <div id="dvLogin">
            <PM:Label runat="server" id="lblUserName" Text="Username: "></PM:Label>
         </div>
    </form>
</body>


Aggiungo che in pagina, quando sto cercando di aggiungere il mio controllo Label, l'intellisense ne mostra 2 identici (CustomControls.Label) e mi suggerisce già un errore (Ambiguous reference).

Cercando nel web ho trovato solo problemi di riferimento circolare, ma o non lo vedo io, oppure non c'entra nulla col mio problema.

Avete qualche suggerimento da darmi?

Grazie

dZ
Registrato
DonZaucker74
Jr. Member
**

Karma: +4/-1
Scollegato Scollegato

Messaggi: 150


Mostra profilo
« Risposta #1 inserita:: Ottobre 18, 2012, 05:24:54 »


Credo di aver risolto.

Potrebbe sembrare che non c'entri granché, ma tutto era dovuto ai namespaces e ad una impostazione delle proprietà del progetto.
Nella scheda Application non avevo impostato nulla come RootNamespace, copiandoci invece il valore di AssemblyName è tornata la luce.  Occhiolino
Non credo sia stata la copia di per se, quanto il fatto di non lasciare vuoto quel valore.

E per dirla tutta, penso che per default RootNamespace fosse già valorizzato (uguale ad AssemblyName) ed io volutamente lo abbia cancellato...  Occhi al cielo
vabbè...

ps. se qualcuno fosse in grado di darmi una spiegazione logica a tutto questo gliene sarei grato Sorriso

dZ
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #2 inserita:: Dicembre 18, 2012, 08:07:28 »

L'errore che hai incontrato capita speso quando si fa refactoring o si creano nuove applicazioni/siti cercando di "riusare" codice già sviluppato.

Conmunque volevo solo suggerirti di usare un vero e proprio progetto esterno (di tipo libreria) per creare controlli custom che andrai ad utilizzare in questo e in futuri progetti.
Il primo motivo è che potrai semplicemente "linkare" questo stesso progetto "libreria di controlli" anche in altre soluzioni senza dover copia-incollare codice rischiando (è sempre così) di avere versioni che vanno per la loro strada. Il secondo è proprio perché questo ti obbliga a separare gli ambiti, ad esempio i tuoi controlli posti in un progetto separato non saranno  MAI in grado di verdere il database.
Usa più che puoi progetti separati per suddivisi per compiti: presentazione/Web, logica applicativa, dialogo con la base dati, librerie di utilità, librerie di controlli.

ciao
Registrato
DonZaucker74
Jr. Member
**

Karma: +4/-1
Scollegato Scollegato

Messaggi: 150


Mostra profilo
« Risposta #3 inserita:: Dicembre 19, 2012, 12:10:55 »


Ciao Alex,

grazie per la tua risposta: condivido tutto cio che scrivi.
Purtroppo però ci dobbiamo scontrare tutti i giorni con la realtà del "tempo", inteso come tempo disponibile a realizzare (e consegnare) il progetto.
Una premessa è fondamentale: il porting non è dovuto a seguire la "moda" Microsoft e utilizzare/sperimentare il framework 4, piuttosto ad evitare problemi dovuti alla "vecchiaia" del framework 1.1. Quindi è un lavoro "in piu" da fare, non "il" lavoro da fare.
Portare un progetto complesso dalla sua forma attuale alla forma da te indicata (collezione di piu progetti libreria, separati per logica, ecc ecc ) è la soluzione "ideale" alla quale tutti i progetti "reali" dovrebbero tendere Sorriso
Non ti sto ad annoiare, conoscerai anche tu benissimo questi problemi.

dZ

Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines