Invoquer ASP.NET événement TextChanged de JavaScript à l'aide d' __doPostBack
Comme beaucoup d'autres, je suis en train d'invoquer un .NET de contrôle côté serveur d'événement à partir de JavaScript.
Plus précisément, je tiens à feu le TextChanged
événement sur une zone de texte nommée txtSearch
. Donc, je suis à la recherche de l'événement de client-côté:
protected void txtSearch_TextChanged(object sender, EventArgs e)
Avoir lu beaucoup de réponses sur (par exemple ici et ici) j'ai le code JavaScript suivant:
__doPostBack('ctl00$ctl00$Container$Main$txtSearch', 'TextChanged');
Mais le côté serveur de l'événement se déclenche jamais.
J'ai essayé de nombreuses permutations: avec le AutoPostBack le vrai et le faux, avec et sans l'événement déclaré dans le côté serveur des instructions sur la ASPX (c'est à dire OnTextChanged=""), avec la EventValidation désactivé dans la page de déclaration, à l'aide de la ClientID plutôt que l'id unique dans le EVENTTARGET paramètre... mais l'événement est encore jamais tiré.
Un couple de d'autres points
- la
txtSearch
bouton de contrôle est aussi le déclencheur pour un UpdatePanel, dans le cas où des questions. - Je suis à la conversion de code existant, dont il y en a beaucoup, et suis à la recherche de quelque chose que je peux déposer sur chaque page, plutôt que de convertir le code-behind événements à PageMethods.
Quelqu'un peut me dire ce que je dois faire?
- Pour aider à réduire le problème - le
Page_Load
événement me faire virer? - oui, c'est fait.
Vous devez vous connecter pour publier un commentaire.
J'ai essayé, et ça marche pour moi:
Le côté serveur
asp:TextBox
, et le côté clientinput
qui se déclenche__doPostBack
sur cliquez sur. Le__doPostBack
script est généré parPostBackOptions
:La
txtSearch_TextChanged
gestionnaire d'événement se déclenche lorsque la valeur de la zone de texte est modifié, et lasubmit
bouton est cliqué.Mais attention, pour les commandes comme
TextBox
le texte est stocké dans le viewstate; le nouveau texte entré par l'utilisateur dans les magasins de la forme des données. Lorsque leTextBox
charge de l'état d'affichage de données, il est l'ancienne valeur. C'est par rapport à la nouvelle valeur dans le formulaire. Si les valeurs sont différentes, laTextChanged
événement est déclenché. Si non, le gestionnaire d'événement ne sera pas déclenché. C'est la raison pour laPage_Load
événement virer (publication s'est produite), maistxtSearch_TextChanged
n'a pas d'incendie dû à la valeur de laTextBox
n'a pas changé.__doPostBack
-comme des références. Le nom du contrôle côté serveur peut être changé, et puis tous vos extraits de code ne fonctionne pas. Mais c'est à vous de décider comment coller ces blocs. (2) dans mon exempleAutoPostBack
propriété n'est pas définie. La valeur par défaut pour il estfalse
, si cette fonctionnalité est désactivée par défaut. Et enfin, le valeur de votre zone de texte doit être modifié depuis la dernière publication pour des événements côté serveur à feu. C'est la façon dont les événements côté serveur de travail.Page_Load
), puis d'appelertxtSearch_TextChanged
manuellement.Ensemble auotpostback valeur false à la propriété pour votre txtbox et AutoEventWireup="true" pour votre contrôle ou d'une page de la déclaration.
OnTextChanged d'événements côté serveur sera trop de travail.
si vous n'avez pas utiliser jquery dans votre projet, faites le moi savoir et je vous donne quelques exemple en javascript sans à l'aide de jquery.