2010-09-20 5 views
0

Je suis vraiment nouveau sur asp.net et j'ai quelques problèmes à résoudre. J'ai de l'expérience en programmation, mais ce n'est pas asp.net. Cependant, j'ai été capable de suivre le code assez pour faire d'autres changements dans le code pour résoudre d'autres problèmes.Problème avec asp.net C# focus, page_load

La première est la suivante:

Je travaille avec une forme qui a une méthode de quantité de calcul qui est appelée lorsque l'utilisateur entre une valeur dans une zone de texte montant. La même méthode est appelée lorsque le contrôle suivant, le nombre de paiements, a une valeur.

Ainsi, dans les deux contrôles:

onTextChanged="ctrlName_textChanged" 

Puis dans le code derrière, la méthode TextChanged fait:

calculateAmount(); 

Le problème est après le montant est calculé et le rendement, l'accent semble se réinitialiser et l'utilisateur doit tabuler tout le chemin à travers le formulaire à l'endroit où ils étaient.

Les zones de texte en question sont dans un panneau qui commence par être masqué et rendu visible de façon conditionnelle. Toutes mes excuses si je n'ai pas utilisé la terminologie .net appropriée.

Il semble que le même problème puisse causer mon deuxième problème. Lorsque l'utilisateur tape un montant, puis des onglets et ajoute rapidement le nombre de paiements, vous pouvez voir le montant calculé correctement et affiche très rapidement le total approprié dans la zone de texte montant total. Cependant, même si cela se produit pendant un laps de temps très court, l'ordre de tabulation est de nouveau réinitialisé ainsi que la valeur du montant total.

J'ai examiné différentes méthodes pour essayer de résoudre le problème de mise au point.

Dans la méthode TextChanged, j'ai essayé d'utiliser quelque chose comme:

Session["myval"] = "someval"; 

ensuite essayé de vérifier contre que Page_Load avec quelque chose comme: if (! Session [ "myval"] = null) { cette .NextControl_Name.Focus(); }

mais cela n'a jamais fonctionné correctement.

J'ai essayé aussi de définir un cookie dans cette même méthode TextChanged en utilisant quelque chose comme ceci:

Response.Cookies["myval"].Value = "somevalue"; 

ensuite essayé de vérifier que dans Page_Load en utilisant quelque chose comme les précédentes si le bloc ci-dessus, mais en utilisant Request.Cookies [ » myval "] comme source.

Existe-t-il une bonne référence avec des exemples de code vraiment clairs que je peux examiner pour ce type de mise en œuvre?

Nous vous remercions à l'avance,

C.

Répondre

1

On dirait que vous avez un problème de postback ...

Rappelez-vous que le web est apatride. Cela signifie que lorsque vous avez rendu une page Web dans.NET et vous attachez un événement qui exécute le code de serveur ... il fait un HTTP POST de nouveau au serveur qui est effectivement une nouvelle demande de page. La méthode Page_Load se déclenche à nouveau ainsi que votre événement lié. Ainsi, votre événement onTextChanged renvoie une nouvelle requête au serveur. C'est pourquoi vous voyez la mise au point réinitialisée et pourquoi lorsque vous tabulez rapidement, la valeur semble disparaître comme par magie.

Vous pouvez faire une de plusieurs choses, vous pouvez mettre en œuvre le UpdatePanel dans le AjaxControlToolkit http://www.asp.net/ajax/ajaxcontroltoolkit/samples/

vous pouvez utiliser PageMethods et faites votre validation avec javascript et jQuery (ou autre bibliothèque js) voir méthode la page d'information http://www.geekzilla.co.uk/View30F417D1-8E5B-4C03-99EB-379F167F26B6.htm

Hope this helps

+0

Excellente réponse, beaucoup et beaucoup de gens ont cet obstacle en commençant par ASP.NET, ils oublient le protocole sous-jacent est apatride. Juste l'autre jour, j'ai dû enseigner à un programmeur de 10 ans + cette chose exacte. Je pense qu'une partie du blâme réside dans la façon dont ASP essaie de cacher les couches sous-jacentes ... –

+0

Merci Eddy ... oui J'ai eu du mal avec .NET pendant un moment avant que je ne m'en rende compte. Une fois que vous "obtenez" il est assez puissant mais je suis d'accord que je pense qu'ils essaient de cacher à la plupart des engrenages sous-jacents qu'il obtient beaucoup de nouvelles personnes en difficulté –