Frage

In erster Linie möchte ich sagen, dass ich weiß, dass Zugriff auf Server-Seite Kontrollen in meiner Ansicht nach in MVC verpönt. Allerdings muss ich in meiner Situation (soweit ich sehen kann). Hier ist meine Geschichte. :)

Ich habe ein 3rd-Party-Steuerelement, das ich in meiner Web-Anwendung bin mit. Ich habe zur Zeit die Aufgabe zu portieren unsere WebForms Lösung MVC gegeben worden. Diese besondere Dritter Web-Steuerung erfordert die WebForms Architektur, so suche ich nur den gleichen Code von meinem WebForms Projekt verwenden.

erster Ansatz war zwei Websites (eine WebForms-Website und eine MVC-Site) zu haben und dann die beide mit iFrames von der MVC-Seite zu verknüpfen. Während ich weiß, dass das funktionieren würde, war es ein bisschen zuviel des Guten gerade diese besondere Kontrolle zu verwenden. Nach mehr Forschung zu tun, ich entdeckt , dass ich „die Jungen mischen“ und verwenden können, die WebForms Architektur innerhalb einer MVC-Projekt. Daher ist der neue Ansatz, den ich gemacht habe, ist auf nur Kopieren über die Seiten, die diese dritte Partei Kontrolle in ein bestimmtes Verzeichnis (dh. ‚View \ somedir \ WebForms‘) und dann das Verzeichnis ignorieren in meiner global.asax-Datei, so dass das Routing-System MVC holen sie es nicht:

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

Leider, wenn ich über die ASPX-Seite auf mein MVC-Projekt kopiert, habe ich entdeckt, dass die Codebehind nicht mich auf der Seite Zugang zu meiner Kontrolle gewährt. Hier ist, wie die Dinge ein:

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

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

Hier ist, was mein Code hinter wie folgt aussieht:

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

Leider wird mein Projekt nicht einmal kompilieren, weil ich diesen Fehler auf jeder Kontrolle in meinem Codebehind. Es ist kein Problem, die andere Steuerelemente zu konvertieren (dh. Etiketten, Schilder, Textboxen, etc ..) auf Client-Tags, aber ich brauche den Zugang zu dieser benutzerdefinierten Steuerelement in meinem Code haben, hinter so kann ich höre es ist (serverseitige ) Ereignisse und entsprechend reagieren; Grund WebForms stuff ...

Ist das, was ich versuche sogar möglich, zu tun? Ein weiterer Ansatz, den ich über diese might Arbeit gedacht ist zu initialisieren und Trap die Server-Side-Events in der Controller-Klasse. Allerdings würde ich den Zustand der Steuerung in der Ansicht zu vermeiden, wie Serialisierung, einfach an die Steuerung zu übergeben und zurück, wenn möglich?

Vielen Dank im Voraus für jede Beratung!

War es hilfreich?

Lösung

Heilige Scheiße !! Ich fand die Lösung, die 10 Minuten, nachdem ich gepostet.

Das Update war nach rechts auf meinem Projekt klicken und sagen „zu Web Application Konvertieren“ und meine Klasse Codebehind auf einen ‚teilweise‘ wieder ändern. Alle meine Kontrollen sind jetzt über den Code hinter zugänglich.

Danke fürs Lesen und ich hoffe, dass meine Frage / Antwort jemand anderes 1 Tag helfen. :)

Andere Tipps

Ich habe nicht den Punkt sehen, in etwas zu MVC Portierung nur in traditioneller WebForms der Hälfte davon zu halten.

Dieser Ansatz bedeutet, alle zukünftigen Entwickler mit beiden Technologien vertraut zu sein brauchen und nicht sauber ist meiner Meinung nach.

ich mit dem einen oder anderen gehen und versuchen, die beiden zu vermeiden mischen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top