2009-02-26 7 views
1

J'ai un contrôle ASP personnalisé qui est basé sur un menu déroulant (menu déroulant). Si je désactive mon contrôle en ajoutant le mot "disabled" dans son code HTML, je commence à recevoir des erreurs de pointeur null lors du traitement des données de formulaire.La désactivation d'un contrôle .NET empêche-t-elle la publication?

Je pense que le navigateur ne publie pas les éléments de formulaire désactivés ou ASP.NET les ignore lors du traitement des données de formulaire. Je ne suis pas sûr de savoir lequel c'est. J'essaie de comprendre où je perds des données.

Merci pour votre aide.

PS. Je me rends compte qu'il y a une meilleure façon de créer et de désactiver les contrôles que de modifier manuellement le HTML, mais il y a un contexte ici qui ne me permet pas de faire autrement.

Répondre

5

Oui Enable = false empêche le contrôle d'ajouter la valeur du contrôle à la collecte de données publiée.

vous pouvez utiliser readonly attribute à la place.

ici MSDN il dit:

La valeur du texte d'un contrôle TextBox avec la propriété ReadOnly définie sur true est envoyé au serveur lorsqu'un postback se produit, mais le serveur ne fait aucun traitement pour une zone de texte en lecture seule. Cela empêche un utilisateur malveillant de de modifier une valeur de texte en lecture seule. La valeur de la propriété Texte est conservée dans l'état de la vue entre les publications, sauf si est modifié par le code côté serveur.

Voici également le Microsoft's reply pour un rapport de bogue lié au sujet.

mais si vous utilisez de façon classique comme cela fonctionnera:

txt2.Attributes.Add("readonly", "readonly"); 
+0

Ceci ne fonctionne pas pour une boîte de sélection. Le menu déroulant est grisé mais je peux toujours changer les valeurs. Voir: http://www.htmlcodetutorial.com/forms/_SELECT_READONLY.html –

+0

Le tour en lecture seule ne fonctionne pas pour moi mais vous avez répondu à ma question. Je vais juste gérer les valeurs nulles. Merci –

+0

Je trouve une ressource qui explique pourquoi cela n'a pas fonctionné, et j'ai ajouté le code testé et fonctionnel pour les zones de texte, mais je ne suis pas sûr des listes déroulantes. – Canavar

0

Il empêchera le contrôle de l'affichage en arrière, mais rappelez-vous ce paradigme Web est une technologie client/serveur. Une personne pourrait modifier les données du client (HTML et/ou Javascript) et forcer une publication, peu importe ce que vous lui envoyez. Par conséquent, ne comptez pas sur cela pour les opérations sensibles à la sécurité telles que la manipulation de l'argent et ainsi de suite.

Toujours effectuer une vérification côté serveur pour les opérations sensibles.

+0

Oui, j'applique également des choses sur la couche de données. Merci pour le rappel. –