web-dev-qa-db-fra.com

ASP.NET donne à hiddenfield une valeur en Javascript

Je ne sais pas comment définir la valeur d'un hiddenField en Javascript. Quelqu'un peut-il me montrer comment faire cela?

Javascript:

document.getElementById('hdntxtbxTaksit').value = "";

HTML:

<asp:HiddenField ID="hdntxtbxTaksit" runat="server" Value="" Visible="false">   </asp:HiddenField>

erreur: "Impossible d'obtenir la valeur de la propriété\'valeur \': l'objet est null ou non défini"

18
ozkank

Avant ASP.Net 4.0

Identité du client

Obtenez l'ID client généré dans la page utilisant la page maître. Comme la page maître est de type UserControl, elle aura son propre identifiant, elle traitera la page comme un contrôle enfant et générera un identifiant différent avec le préfixe ctrl_.

Ce problème peut être résolu en utilisant <%= ControlName.ClientID %> dans une page et peut être affecté à une chaîne ou à une variable javascript pouvant être référencée ultérieurement.

var myHidden=document.getElementById('<%= hdntxtbxTaksit.ClientID %>');
  • L'ID de contrôle du serveur Asp.net variera si vous utilisez la page maître. 

ASP.Net 4.0 +

ClientIDMode, propriété

Utilisez cette propriété pour contrôler la manière dont vous souhaitez générer l'ID pour vous. Pour votre cas, définir ClientIDMode = "static" au niveau de la page résoudra le problème. La même chose peut également être appliquée au niveau de contrôle.

29
Murali Murugesan

asp:HiddenField comme:

<asp:HiddenField runat="server" ID="hfProduct" ClientIDMode="Static" />

code js:

$("#hfProduct").val("test")

et le code derrière:

hfProduct.Value.ToString();
4
ehsan rezaee

essayez ce code: 

$('hdntxtbxTaksit').val('test');
3
Black sheep

D'après ce que je comprends, si vous définissez controls.Visible = false lors du chargement initial de la page, le rendu ne sera pas rendu dans la réponse du client. Ma suggestion pour résoudre votre problème est

N'utilisez pas d'espace réservé, à en juger par le scénario, vous n'avez pas vraiment besoin d'un espace réservé, sauf si vous devez ajouter de façon dynamique des contrôles côté serveur. Utilisez div, sans runat=server. Vous pouvez toujours contrôler la visibilité de cette div en utilisant css . Si vous devez ajouter des contrôles dynamiquement plus tard, utilisez un espace réservé, mais ne définissez pas visible = false. L'espace réservé n'aura de toute façon pas d'affichage. Définissez la visibilité de cet espace réservé à l'aide de css. Voici comment procéder par programmation:

placeholderId.Attributes["style"] = "display:none";

Quoi qu'il en soit, comme d'autres l'ont déjà indiqué, vos problèmes surviennent car une fois que vous avez défini control.visible = false, il n'est pas rendu dans la réponse du client.

1
SaiKiran Mandhala
document.getElementById('<%=hdntxtbxTaksit.ClientID%>').value

L'identifiant que vous avez défini sur le serveur est l'identifiant du serveur, différent de l'identifiant du client.

1
Amiram Korach

Essayez de définir la valeur Javascript comme dans document.getElementByName('hdntxtbxTaksit').value = '0';

0
Jason Cole

Je suppose que vous devez utiliser ClientID plutôt que la chaîne d'identifiant littéral dans votre code JavaScript, car vous avez marqué le champ avec runat="server".

Par exemple, si votre code JavaScript est dans un fichier aspx (pas un fichier JavaScript séparé):

var val = document.getElementById('<%=hdntxtbxTaksit.ClientID%>').value;

Si c'est dans un fichier JavaScript séparé qui n'est pas rendu par le fichier ASP.Net, vous devrez le trouver d'une autre manière, par exemple par classe.

0
T.J. Crowder

Je vais vous suggérer d'utiliser ClientID de HiddenField. Enregistrez d’abord son identifiant client dans n’importe quelle variable Javascript à partir de codebehind, puis utilisez-la dans le script clientside. comme:

Code de fichier .cs:

ClientScript.RegisterStartupScript(this.GetType(), "clientids", "var hdntxtbxTaksit=" + hdntxtbxTaksit.ClientID, true);

puis utilisez le code suivant dans JS:

document.getElementById(hdntxtbxTaksit).value= ""; 
0
Sanjeev Rai