1 votes

Nullable<> comme TModel pour ViewPage

Quelles sont les raisons possibles pour lesquelles les types Nullable<> ne sont pas autorisés à être passés comme paramètre TModel de System.Web.Mvc.ViewPage<TModel> générique ? Cela pourrait être utile parfois.

Dans ASP.NET MVC source défini ce que TModel devrait être une classe :

public class ViewPage<TModel> : ViewPage where TModel : class

mais les types Nullable sont des types de valeur. Peut-être que la définition pourrait être moins restrictive...

3voto

Levi Points 22222

Cela n'aurait pas de sens que cela fonctionne actuellement, car le ViewPage<T> vérifie toujours en interne que le modèle est une instance de T. Vous ne pourriez jamais passer null à cause de cette vérification.

Quant à savoir pourquoi les types de structure n'étaient pas autorisés en premier lieu, il y a une multitude de raisons. Parmi elles : (a) cela pourrait encourager les gens à utiliser des types de structure personnalisés pour un modèle, ce qui n'est presque jamais la bonne chose à faire ; (b) vous ne pouvez pas passer un type de structure comme paramètre à Controller.UpdateModel() ; (c) les modèles devraient avoir une égalité de référence afin que les filtres puissent les inspecter et les modifier ; (d) les types de structure intégrés comme int, etc. ne sont normalement pas utiles par eux-mêmes comme objet de modèle ; et (e) les types de structure ne supportent pas l'héritage, par exemple passer un modèle int dans un ViewPage<long> exploserait.

Il s'avère que (c) n'est probablement pas un problème parce que les types de structure doivent être immuables, mais les autres points exigent que l'autorisation des types de structure fasse l'objet d'une réflexion approfondie et d'une décision de conception avant de les soutenir. Les conséquences de leur prise en charge sont bien plus importantes que la simple suppression de la contrainte sur ViewPage<T>.

1voto

Marc Gravell Points 482669

Une valeur unique n'est pas vraiment un "modèle" - vous pourriez simplement utiliser le dictionnaire et le cast ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X