Afficher, de masquer div en utilisant le code-behind
J'ai un DropDownList
pour laquelle je suis en train de montrer un div
OnSelectedIndexChanged
, mais il dit OBJECT REQUIRED
.
Je suis de liaison de la DataList
dans cette div:
aspx:
<asp:DropDownList runat="server" ID="lstFilePrefix1" AutoPostBack="True"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" >
<asp:ListItem Text="Prefix1" Value="Prefix1" />
<asp:ListItem Text="Prefix2" Value="Prefix2" />
<asp:ListItem Text="Prefix3" Value="Prefix3" />
<asp:ListItem Text="Prefix1 and Prefix2" Value="Prefix1 and Prefix2" />
<asp:ListItem Text="Prefix2 and Prefix3" Value="Prefix2 and Prefix3" />
</asp:DropDownList>
<asp:DataList ID="DataList1" runat="server" RepeatColumns="4"
CssClass="datalist1" OnItemDataBound="SOMENAMEItemBound"
CellSpacing="6" onselectedindexchanged="DataList1_SelectedIndexChanged"
HorizontalAlign="Center" Width="500px">
code derrière:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (lstFilePrefix1.SelectedItem.Text=="Prefix2")
{
int TotalRows = this.BindList(1);
this.Prepare_Pager(TotalRows);
Page.ClientScript.RegisterClientScriptBlock(GetType(), "JScript1", "ShowDiv('data');", true);
}
}
javascript:
function ShowDiv(obj)
{
var dataDiv = document.getElementById(obj);
dataDiv.style.display = "block";
}
Ce que je fais mal?
- Est la div à l'intérieur d'un conteneur de dénomination? Veuillez consulter le code source de la page et vérifier si il y a un élément avec l'id 'données'.
- Pourquoi êtes-vous à l'aide de JS pour afficher le div en utilisant AutoPostBack? Mettre le DataList dans un panneau ou faire de la div
runat="server"
, et il suffit d'ajouter un style d'affichage de la dynamiclly.
InformationsquelleAutor ravi | 2009-11-16
Vous devez vous connecter pour publier un commentaire.
Faire de la div
et ne
Votre méthode ne fonctionne pas car le javascript est rendu dans le haut de la balise body, avant le div est rendu. Vous devez inclure le code à dire le javascript pour attendre que le DOM soit prêt à prendre sur votre demande, qui sera probablement le plus facile à faire avec jQuery.
runat="server"
est la clé pour être en mesure de manipuler lediv
du code derrière.Vous pouvez utiliser un standard ASP.NET Panneau et puis définissez la propriété visible dans votre code derrière.
Pour afficher le panneau dans le code-behind:
Il ya quelques façons de gérer le rendu et affichage des contrôles sur la page et vous devriez prendre note de ce qui se passe avec chaque méthode.
De rendu et de Visibilité
Il ya certains cas où les éléments sur votre page n'a pas besoin d'être rendu pour l'utilisateur en raison d'un certain type de logique ou de la base de données de la valeur. Dans ce cas, vous pouvez éviter de rendu (en créant le contrôle sur le formulaire de la page web) au total. Vous voulez faire si le contrôle n'a pas besoin d'être montré plus tard sur le côté client, parce que peu importe ce que, l'utilisateur de l'affichage de la page n'a jamais besoin de le voir.
Tous les contrôles ou les éléments peuvent avoir leur visibilité définie à partir du côté serveur. Si c'est un simple vieux élément html, il vous suffit de définir la
runat
la valeur de l'attributserver
sur le balisage de la page.La décision de rendre le div ou non, peut maintenant être fait dans le code-behind de la classe comme ceci:
Si défini à true, elle sera affiché sur la page, et si c'est faux, il ne sera pas rendu du tout, même pas caché.
Côté Client Cacher
Masquer un élément est faite sur le côté client seulement. Sens, il est bien affiché, mais il a un
display
de style CSS fixés sur elle qui instruit votre navigateur pour ne pas montrer à l'utilisateur. Ceci est utile lorsque vous souhaitez afficher/masquer les choses en se basant sur la saisie de l'utilisateur. Il est important de savoir que l'élément PEUT être cachée sur le côté serveur trop tant que l'élément de contrôle/arunat=server
juste comme je l'ai expliqué dans l'exemple précédent.Cacher dans le Code de la Classe
Pour masquer un élément que vous souhaitez rendu de la page, mais caché est une simple ligne de code:
Si vous avez besoin de retirer la
display
style côté serveur, il peut être fait en enlevant ledisplay
de style, ou d'un paramètre à une valeur différente commeinline
oublock
(valeurs décrites ici).Caché sur le Côté Client avec javascript
L'aide d'un bon vieux javascript, vous pouvez facilement masquer le même élément de cette manière
jQuery permet de cacher des éléments un peu plus simple si vous préférez utiliser jQuery:
Une autre méthode (il semble que personne n'a évoqué jusqu'à présent), est d'ajouter un supplément de KeyValue paire à celle de l'élément de Style de tableau. j'.e
Cela a l'avantage de se contenter de cacher l'élément, plutôt que de le prévenir d'écrits dans le DOM d'abord - contrairement à la propriété "Visible". c'est à dire
résultats dans le div jamais écrits dans les DOM.
Edit: Cela devrait être fait dans le 'code-behind', I. e. L' *.aspx.cs fichier.
RegisteredClientScriptBlock
ajoute le script en haut de la page sur le post-retour avec aucune garantie sur l'ordre, ce qui signifie que soit l'appel est injecté après la déclaration de la fonction (votre fichier js avec la fonction inline après votre appel) ou lorsque le script tente d'exécuter le div n'est probablement pas encore là parce que la page est encore rendu. Une bonne idée est probablement de simuler les deux scénarios que j'ai décrit ci-dessus sur firebug et voir si vous obtenez des erreurs similaires.Je suppose que ça pourrait fonctionner si vous ajoutez le script en bas de la page avec
RegisterStartupScript
- vaut la peine d'essayer au moins.De toute façon, comme une solution alternative si vous ajoutez le
runat="server"
attribut de la div, vous serez en mesure d'y accéder par son id dans le code-behind (sans revenir à js - comment cool que peut-être), et la faire disparaître comme ceci:J'ai eu un problème de réglage de l'élément.Visible = true dans mon code behind n'avait aucun effet sur l'écran. La solution pour moi a été d'envelopper la zone de ma page où j'ai voulu montrer la div dans une page ASP UpdatePanel, qui est utilisé pour provoquer d'écran partielle des mises à jour.
http://msdn.microsoft.com/en-us/library/bb399001.aspx
Avoir l'élément runat=server m'a donné accès à partir du code-behind, et de le placer dans l'UpdatePanel laissez effectivement être mis à jour sur l'écran.
vb.net code
Caché sur le Côté Client avec javascript
L'aide d'un bon vieux javascript, vous pouvez facilement masquer le même élément de cette manière:
Alors de montrer à nouveau:
jQuery permet de cacher des éléments un peu plus simple si vous préférez utiliser jQuery:
... et à montrer: