2009-06-18 11 views
5

Prima di tutto lasciatemi dire che so che l'accesso ai controlli lato server nella mia vista è disapprovato in MVC. Tuttavia, ho bisogno di nella mia situazione (per quanto posso vedere). Ecco la mia storia. :)Come posso accedere a un controllo lato server in un codebehind nel mio progetto MVC?

Ho un controllo di terze parti che sto utilizzando nella mia applicazione web. Al momento mi è stato assegnato il compito di trasferire la nostra soluzione WebForm a MVC. Questo particolare controllo web di terze parti richiede l'architettura WebForms, quindi sto cercando di utilizzare lo stesso codice dal mio progetto WebForms.

Il mio initial approach doveva avere due siti Web (un sito WebForms e un sito MVC) e quindi collegare i due utilizzando iFrame dal lato MVC. Mentre so che funzionerebbe, è stato un po 'eccessivo usare solo questo particolare controllo. Dopo aver fatto ulteriori ricerche, ho discovered che posso "mescolare i ragazzi" e utilizzare l'architettura WebForms all'interno di un progetto MVC. Pertanto, il nuovo approccio che ho adottato è solo copiare le pagine che utilizzano questo controllo di terze parti in una directory specifica (ad esempio "View \ SomeDir \ WebForms") e quindi ignorare quella directory nel mio global.asax file in modo che il sistema di routing MVC non raccoglierla:

routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}"); 

Purtroppo, quando ho copiato sulla pagina ASPX al mio progetto MVC, ho scoperto che il codeBehind non mi concede l'accesso al mio controllo sulla pagina. Ecco come le cose sono istituiti:

<%@ Register 
    Assembly="..." 
    Namespace="..." 
    TagPrefix="custom" %> 

<custom:SomeControl ID="customControl" runat="server" /> 

Ecco ciò che il mio codice è dietro come:

public class MyPage : Page 
{ 
    protected void Page_Load(object sender, EventArgs args) 
    { 
    Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl' 
    } 
} 

Purtroppo il mio progetto non anche compilare perché ottengo questo errore su ogni controllo nella mia CodeBehind . Non è un problema convertire gli altri controlli (ad esempio etichette, pannelli, caselle di testo, ecc.) Nei tag del client, ma ho bisogno di avere accesso a questo controllo personalizzato nel mio codice, così posso ascoltarlo (lato server) eventi e rispondere di conseguenza; materiale di base WebForms ...

È quello che sto cercando di fare anche possibile? Un altro approccio a cui ho pensato è che il lavoro might consiste nell'inizializzare e intercettare gli eventi lato server nella classe controller. Tuttavia, vorrei evitare di serializzare lo stato del controllo nella vista, semplicemente per passarlo al controller e viceversa, se possibile?

Grazie in anticipo per qualsiasi consiglio!

risposta

5

Santo schifo !! Ho trovato la soluzione 10 minuti dopo aver postato questo.

La correzione era fare clic con il tasto destro del mouse sul mio progetto e dire "Converti in applicazione Web" e cambiare la mia classe CodeBehind in "parziale". Tutti i miei controlli sono ora accessibili tramite il codice sottostante.

Grazie per la lettura e spero che la mia domanda/risposta possa aiutare qualcun altro un giorno. :)

0

Non vedo il punto nel trasferire qualcosa a MVC solo per conservarne metà nei tradizionali Web Form.

Questo approccio significherà che ogni futuro sviluppatore dovrà avere familiarità con entrambe le tecnologie e non è pulito secondo me.

Vorrei andare con uno o l'altro e cercare di evitare di mescolare i due.

+0

Il controllo che sto utilizzando sta funzionando su una versione di Silverlight e ci piacerebbe portarlo su MVC per qualche ora. Quello che è iniziato come un piccolo sito che mostrava solo funzionalità per questo particolare controllo si sta trasformando presto in un vero e proprio portale web e MVC è ciò che abbiamo deciso di spostare in ... – Luc

+0

A volte non è possibile convertire un'intera applicazione legacy alla tecnologia più recente e occorre un approccio più iterativo. – Stumblor

Problemi correlati