Comment puis-je accéder à un contrôle côté serveur dans un code en retard dans mon projet MVC?

StackOverflow https://stackoverflow.com/questions/1014987

Question

Permettez-moi tout d’abord de dire que je sais que l’accès aux contrôles côté serveur dans ma vue est mal vu dans MVC. Cependant, j'ai besoin de dans ma situation (autant que je peux voir). Voici mon histoire. :)

J'ai un contrôle tiers que j'utilise dans mon application Web. On me charge actuellement de porter notre solution WebForms vers MVC. Ce contrôle Web tiers particulier nécessite l’architecture WebForms. Je cherche donc à utiliser le même code que mon projet WebForms.

Mon approche initiale devait avoir deux sites Web (un site WebForms et un site MVC), puis les relier à l'aide d'iFrames du côté de MVC. Bien que je sache que cela fonctionnerait, c'était un peu exagéré d'utiliser ce contrôle en particulier. Après avoir fait plus de recherches, je découvert que je peux mélanger les garçons " et utiliser l'architecture WebForms dans un projet MVC. Par conséquent, la nouvelle approche que j'ai adoptée consiste à seulement copier sur les pages qui utilisent ce contrôle tiers dans un répertoire spécifique (c'est-à-dire "View \ SomeDir \ WebForms"), puis à ignorer ce répertoire. dans mon fichier global.asax afin que le système de routage MVC ne le récupère pas:

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

Malheureusement, lorsque j'ai copié la page ASPX dans mon projet MVC, j'ai découvert que CodeBehind ne me permettait pas d'accéder à mon contrôle sur la page. Voici comment les choses sont mises en place:

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

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

Voici à quoi ressemble mon code:

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

Malheureusement, mon projet ne sera même pas compilé car je reçois cette erreur sur tous les contrôles de CodeBehind. Ce n'est pas un problème de convertir les autres contrôles (étiquettes, panneaux, zones de texte, etc.) en balises clientes, mais je dois avoir accès à ce contrôle personnalisé dans mon code derrière pour pouvoir l'écouter (côté serveur). ) événements et réagir en conséquence; éléments de base de WebForms ...

Est-ce que ce que j'essaie de faire est possible? Une autre approche que je pensais à ce que pourrait fonctionner consiste à initialiser et à intercepter les événements côté serveur dans la classe du contrôleur. Cependant, je voudrais éviter de sérialiser l’état du contrôle dans la vue, mais simplement de le transmettre au contrôleur et vice-versa, si possible.

Merci d'avance pour vos conseils!

Était-ce utile?

La solution

Putain de merde !! J'ai trouvé la solution 10 minutes après avoir posté ceci.

Pour résoudre ce problème, cliquez avec le bouton droit de la souris sur mon projet et indiquez "Convertir en application Web". et changer ma classe CodeBehind de nouveau à une 'partielle'. Toutes mes commandes sont maintenant accessibles via le code situé derrière.

Merci d'avoir lu et j'espère que ma question / réponse aidera quelqu'un d'autre un jour. :)

Autres conseils

Je ne vois pas l'intérêt de porter quelque chose sur MVC, mais de garder la moitié de celui-ci dans les formats Web traditionnels.

Cette approche impliquera que tous les futurs développeurs devront être familiarisés avec les deux technologies et ce n’est pas propre à mon avis.

Je voudrais aller avec l'un ou l'autre et essayer d'éviter de mélanger les deux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top