2011-06-11 2 views
4

Je génère dynamiquement le formulaire en fonction de la liste déroulante sélectionnée. Le formulaire est constitué de champs (saisie de données pour les valeurs décimales + quelques champs de texte). Avoir à ajouter toutes les valeurs décimales à la fin et mettre à jour le Total TextBox avec cette valeur. Total Textbox est désactivé.Perte de la zone de texte désactivée viewstate

Lorsque je clique sur le bouton Enregistrer dans le formulaire après que l'utilisateur a entré ses valeurs, le formulaire entier est conservé dans viewstate à l'exception de la zone de texte désactivée. Lorsque j'active la zone de texte, tout fonctionne correctement. Rappelez-vous, je génère dynamiquement le formulaire et mettre à jour la valeur de la zone de texte totale en utilisant javascript pour calculer (en ajoutant tous les champs décimaux).

P.S. Je fais tout juste pour persister le viewstate.

donc ce qui a le activé/désactivé se est en appui sur le viewstate

Répondre

7

Fondamentalement, j'ai ajouté deux instructions pour le faire fonctionner.

txtBox.Attributes.Add("readonly", "readonly"); 
txtBox.Style.Add("color","gray"); 

Quand je txtBox.Enabled = false, il ne persiste pas, mais fait état d'affichage en utilisant alternativement au-dessus deux déclarations dans mon code-behind

+1

Un peu plus sur le problème sur une question que j'ai posté il y a quelques temps: http://stackoverflow.com/questions/1060518/strange-behavior-using-html-readonly-readonly-vs-javascript-element-readonl/1063609# 1063609 –

+0

@DotNetInfo, mais que se passe-t-il si le contrôle "txtBox" ne peut pas être accédé par intellisense, car il est profondément dans DetailsView ou GridView. Malheureusement, FindControl ("txtBox") ramène toujours null dans page_load. – Fandango68

0

Ajouter javascript sur la page:

function enableTextBoxes() { 
      $("input[type='text'][disabled='disabled']").removeAttr("disabled"); 
     } 

Et ajouter au code du serveur (en Page_Load, PreRender ou une méthode autre)

ClientScript.RegisterOnSubmitStatement(typeof(Page), "enableTextBoxes", "enableTextBoxes();"); 

Si vous utilisez UpdatePanels utiliser alors la méthode ScriptManager.RegisterOnSubmitStatement

+0

J'ai déjà essayé cela avant mais cela n'a pas fonctionné. Fondamentalement, la zone de texte affiche dans l'état désactivé, mais la valeur n'est pas définie sur la publication. La zone de texte s'affiche sans valeur. J'ai utilisé ("readonly", "readonly") l'attribut, cela fonctionne bien, mais ne pas afficher la zone de texte dans l'état désactivé (grisé) – DotNetInfo

+0

@DotNetInfo vous devez supprimer le codage en dur le Enabled = "false" ou ReadOnly = "true "à partir du contrôle de la zone de texte en premier. – Fandango68

2

Oui, élément de formulaire désactivé ne sera pas envoyer sa valeur côté serveur, vous pouvez regarder l'en-tête de la requête. L'élément désactivé n'est pas apparu dans la collection "get" ou "post".

Si vous voulez que l'utilisateur défini ne puisse pas le modifier, vous pouvez le définir en lecture seule.

Questions connexes