Quelle est la meilleure façon d’implémenter les contrôles utilisateur dans ASP.NET MVC ?

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

  •  09-06-2019
  •  | 
  •  

Question

Comme beaucoup d'autres sur ce site, j'envisage de passer à ASP.NET MVC pour de futurs projets.Actuellement, mes sites exécutent les formulaires Web ASP.NET 2.0 traditionnels, et cela fonctionne bien pour nous, donc mon autre option est simplement de m'en tenir à ce que je sais et de passer à ASP.NET 3.5 avec les éléments AJAX intégrés.

Je me demande comment fonctionnent les contrôles utilisateur dans ASP.NET MVC.Nous avons des tonnes de .ASCX contrôles et quelques contrôles composites.Lorsque je travaille avec des concepteurs Web, il est très facile de leur faire utiliser efficacement les contrôles ASCX, même sans aucune connaissance en programmation, c'est donc un plus indéniable.Mais bien sûr, les inconvénients sont le cycle de vie des pages, qui peut être exaspérant, et le fait que les contrôles ASCX sont difficiles à partager entre différents projets.Les contrôles composites sont partageables, mais constituent essentiellement une boîte noire pour un concepteur.

Quel est le modèle dans ASP.NET MVC ?Existe-t-il un moyen de créer des contrôles qui résolvent les problèmes que nous avons résolus à l'aide de contrôles ASCX et composites ?Permettre un accès facile aux concepteurs Web sans avoir à se soucier de la rupture du code est une considération importante.

Était-ce utile?

La solution

Pour implémenter un contrôle utilisateur, vous effectuez l'appel suivant :

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %>

Vous pouvez également voir l'ancienne syntaxe qui, depuis PR5, n'est plus valide

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %>

Vous devrez toujours vous soucier de la rupture de code lors du passage de Web Forms à MVC, mais l'équipe ASP.NET MVC a fait un excellent travail pour minimiser les problèmes.

Autres conseils

Comme Nick l'a suggéré, vous pourrez effectivement restituer vos contrôles utilisateur, mais évidemment le cycle de page, l'état de la page et la publication des formulaires Web ASP traditionnels ne fonctionneront plus, rendant ainsi vos contrôles probablement inutiles.

Je pense que vous devrez réécrire la plupart de vos contrôles complexes pour porter votre site Web sur MVC, tandis que des contrôles simples qui, par exemple, fournissent uniquement un formatage et n'ont pas de statut de publication, devraient simplement fonctionner.Le code fourni par Nick fonctionnera simplement dans ce cas.

Et à propos du partage entre plusieurs projets :Je pense que les contrôles ressembleront davantage à des « composants de rendu HTML réutilisables » pouvant être partagés sur un site Web, plutôt qu'à des « composants de code réutilisables » avec logique (comme les contrôles WebForms).Votre logique Web sera/devrait être dans les contrôleurs de pages et non dans les contrôles HTML.Par conséquent, le partage des contrôles sur plusieurs projets ne sera pas aussi utile que dans le cas des WebForms.

MVC a un cycle de vie de page différent de celui de votre contrôle utilisateur.

Vous pouvez envisager de réécrire cela.

L'aspx est le voir.Vous avez encore besoin d'une réécriture, la syntaxe est différente.JavaScript fonctionnera.Mais je trouve à peine que les WebControls fonctionneront.Parce que MVC n'a plus d'état d'affichage ni de publication.

Pour le code derrière (aspx.cs), vous devez le convertir en un Manette classe.Page_Load la méthode ne fonctionnera plus.Vous le laissez probablement à Index() méthode.

Modèle sont simplement les classes d'entités que votre code consomme.

Conclusion, c'est une réécriture totale.Acclamations.Bon codage.

Ouais, vous pouvez faire RenderPartial.C'est un bon début.Mais finalement, ces gars-là auront besoin de logique et d’autres éléments de type contrôleur.Soyez à l’affût d’une implémentation de sous-contrôleur de la part de l’équipe framework.Il devrait également y avoir bientôt quelque chose dans MvcContrib.Ou roulez le vôtre.

Modifier: Je viens de poster à ce sujet ici : http://mhinze.com/subcontrollers-in-aspnet-mvc/

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