Domanda

Prima di tutto fammi dire che so che l'accesso a controlli lato server nella mia vista è disapprovato in MVC. Tuttavia, devo nella mia situazione (per quanto posso vedere). Ecco la mia storia :)

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

Il mio approccio iniziale 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 avrebbe funzionato, è stato un po 'eccessivo solo usare questo particolare controllo. Dopo aver fatto ulteriori ricerche, ho scoperto che posso " mescolare i ragazzi " e utilizzare l'architettura WebForms all'interno di un progetto MVC. Pertanto, il nuovo approccio che ho adottato è quello di solo copiare le pagine che utilizzano questo controllo di terze parti in una directory specifica (ad esempio "Visualizza \ SomeDir \ WebForms") e quindi ignorare quella directory nel mio file global.asax in modo che il sistema di routing MVC non lo raccolga:

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

Sfortunatamente, quando ho copiato la pagina ASPX sul mio progetto MVC, ho scoperto che CodeBehind non mi concede l'accesso al mio controllo sulla pagina. Ecco come sono impostate le cose:

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

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

Ecco come appare il mio codice dietro:

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

Sfortunatamente il mio progetto non verrà nemmeno compilato perché visualizzo questo errore su ogni controllo in CodeBehind. Non è un problema convertire gli altri controlli (es. Etichette, pannelli, caselle di testo, ecc.) In tag client, ma ho bisogno di avere accesso a questo controllo personalizzato nel mio codice dietro in modo da poterlo ascoltare (lato server ) eventi e rispondere di conseguenza; roba di base di WebForms ...

È possibile anche quello che sto cercando di fare? Un altro approccio a cui ho pensato che potrebbe funziona è 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!

È stato utile?

Soluzione

Santa merda !! Ho trovato la soluzione 10 minuti dopo aver pubblicato questo.

La correzione consisteva nel fare clic con il tasto destro del mouse sul mio progetto e dire " Converti in applicazione Web " e cambia la mia classe CodeBehind in un 'parziale'. Tutti i miei controlli sono ora accessibili tramite il codice dietro.

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

Altri suggerimenti

Non vedo il punto nel porting di qualcosa su MVC solo per mantenerne la metà nei WebForm tradizionali.

Questo approccio significherà che tutti i futuri sviluppatori dovranno avere familiarità con entrambe le tecnologie e secondo me non è pulito.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top