Transmettre des données à partir d'un ASP.NET page de ASCX contrôles utilisateur chargés dynamiquement
Je suis l'élaboration d'un ASP.NET application avec C# et Ajax.
J'ai une page qui contient les contrôles de l'utilisateur chargés dynamiquement. J'ai besoin de transmettre certaines données (valeurs entières et des chaînes) pour le contrôle de l'utilisateur qui a été chargé dynamiquement.
Maintenant j'utilise la Session de transmettre ces valeurs, mais je pense que je peux utiliser un autre moyen; quelque chose comme VIEWSTATE ou caché à l'entrée.
Que voulez-vous me recommander?
Mise à JOUR:
Le fait que je charge les contrôles dynamiquement est important parce que les contrôles sont chargés sur chaque publication, et je ne peux pas stocker n'importe quelle valeur sur les contrôles.
Vous devez vous connecter pour publier un commentaire.
Créer une propriété sur votre contrôle de l'utilisateur avec le type de données que vous souhaitez passer, et de le remplir dans votre page sur la création de la commande.
Dans le code behind:
Vous pouvez également le faire directement dans le balisage:
Configuration des propriétés publiques au sein de votre contrôle de l'utilisateur.
Et puis quand vous mettez votre contrôle de l'utilisateur dans votre page aspx:
Vous pouvez également modifier les valeurs dans le code behind:
À fait répondre à votre quesiton, autant que tout le monde semble ne pas vouloir de vous de le faire, et je suis d'accord...j'ai fait ce genre de chose avant.
La première chose que je ferais, c'est de faire de votre page d'implémenter une interface.
Dans le contrôle:
IVansFannelDataProviderPage provider = this.Page as IVansFannelDataProviderPage;
if (provider != null) { //grab data from interface } else throw YouCantPutThisControlOnThisKindOfPageException();
Ce n'est pas la façon la plus élégante de le faire, mais quand on a beaucoup de contrôles de vouloir partager un très coûteux objet d'adapter le projet de loi.
Cela fonctionne bien, mais il rend votre contrôle inutilisable sur des pages qui n'implémente pas l'interface--et qui rend les contrôles trop serré à votre page. Tout le monde en disant avoir la page obtenir les données à partir du contrôle est correct; vous mettez les contrôles sur la page, pas de pages dans les contrôles.
Vous devez avoir une très bonne raison pour le faire. Pour nous: la charge de l'objet partagé est très cher, et d'avoir la page pour charger/enregistrer n'importe quel type de contrôle a été de travailler sur cet objet a été très utile.
C'était dommage que beaucoup de pages qui n'ont pas vraiment de mettre en œuvre l'interface devait être entassé à fournir une sorte de soutien ou de support de proxy juste pour obtenir le contrôle de travailler, et fait des pages et des contrôles beaucoup moins réutilisables.
Si j'avais à le faire de nouveau, j'aurais la page d'envoyer des données aux contrôles avec des événements, probablement grâce à la réflexion, si j'avais besoin d'être paresseux.
Vous devrez re-charger les contrôles sur chaque post-retour... Donner à cette lecture. Cela pourrait aider.
Dynamique des Contrôles Web, les Publications, et l'État d'Affichage
Genre de défaites le but de l'utilisation d'un ascx de contrôle de l'OMI depuis cette les sauts de contrôle de l'encapsulation. Votre page doit être -l'obtention de données à partir de la commande par le biais de l'abonnement à des événements publiés par le contrôle.
Vous pourrait définir des valeurs dans le HttpContext.Collection d'éléments et de les lire dans vos commandes. C'est comme l'utilisation de Session, sauf qu'il est seulement disponible par demande pas pour l'ensemble de la durée de session.
http://www.4guysfromrolla.com/articles/060904-1.aspx
À mon humble avis c'est un peu paresseux, mais il pourrait être une bonne solution dans certains cas.