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!
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
A volte non è possibile convertire un'intera applicazione legacy alla tecnologia più recente e occorre un approccio più iterativo. – Stumblor