2010-03-02 6 views
0

Je suis en train de faire ce qui suit dans une page ASPX:problème avec des instructions conditionnelles dans asp.net

<%@ Page Language="C#" EnableSessionSTate="true" ValidateRequest="False" Inherits="MyProject.CodeBehind.MYWF.SiteWF" MasterPageFile="~/_layouts/application.master" %> 
<asp:Content ID="Content5" ContentPlaceHolderID="PlaceHolderPageDescription" runat="server"> 
    <% if (!isOld) %> 
    <% { %> 
     <p>display this</p> 
    <% } %> 

</asp:Content> 

ISOLD est une variable bool publique à partir du fichier cs mentionné dans l'espace de noms.

Mais malheureusement, cela m'a donné une erreur inconnue.

Je pourrais faire quelque chose de similaire dans les JSPs, mais après avoir cherché pendant un moment, je ne suis pas sûr si ce qui précède est réalisable dans ASP.NET? (Ai-je manqué une déclaration de balise, ou dois-je écrire la balise entière lib moi-même?)

Merci.

EDIT: Je viens d'avoir une erreur inconnue. J'ai le sentiment que le code ci-dessus a la mauvaise syntaxe ou est totalement faux. J'ai essayé le code suivant, et il n'y avait pas d'erreur, mais la variable bool est toujours faux:

<% #if !isOld %> 
    <p> display this</p> 
<% #endif %> 
+0

Et quelle erreur était-ce? Quelque chose comme: "Impossible de modifier la collection de contrôles"? Si oui, alors vous n'avez pas de chance. Vous devez arrêter le code qui modifie les contrôles (en ajoutant ou en supprimant un, quelque part dans votre codebehind) ou faire apparaître le 'display this' dans un 'PlaceHolder' et définir sa propriété' Visible' de manière appropriée (c'est ce que je voudrais faire). –

+0

Re: votre édition, il vous manque un crochet: '<% if (! IsOld)%>' devrait être '<% if (! IsOld) {%>' (support de note). (Edit: en fait, peut-être pas, je n'ai jamais vu quelqu'un écrire la parenthèse dans une zone totalement différente de <% %> ', il semble étrange .. –

Répondre

3

dans votre front de code:

<%@ Page Language="C#" EnableSessionSTate="true" ValidateRequest="False" Inherits="MyProject.CodeBehind.MYWF.SiteWF" MasterPageFile="~/_layouts/application.master" %> 
<asp:Content ID="Content5" ContentPlaceHolderID="PlaceHolderPageDescription" runat="server"> 
    <asp:PlaceHolder runat="server" id="PlaceHolderIsOld"> 
     <p>display this</p> 
    </asp:PlaceHolder> 
</asp:Content> 

puis dans votre code derrière:

protected void Page_Load(object sender, EventArgs e){ 
    PlaceHolderIsOld.Visible = IsOld; 
} 
+0

@AndreasKnudsen: où PlaceHolderIsOld vit dans le code derrière? Mon code derrière hérite du système – BeraCim

+0

En définissant l'espace réservé dans votre code, il apparaîtra automatiquement comme utilisable dans votre codebehind. (Visual Studio génère le code .Web.UI.Page et je n'ai pas de méthode Page_Load. dans le fichier * .designer.cs) Asp.Net est câblé pour rechercher certaines méthodes dans les pages et les contrôles utilisateur en utilisant la réflexion si vous définissez une méthode avec la signature telle que présentée dans le code ci-dessus alors Asp.Net appelez-le à la partie "Load" du cycle de vie de la page, bien que légèrement cryptique, en particulier pour les sites avancés utilisant des commandes imbriquées et des pages master, cela vaut la peine d'apprendre: h Ttp: //www.coolwebdeveloper.com/downloads/ASPNET20PageLifeCycle.jpg – AndreasKnudsen

+0

Ce que j'ai fini par faire était quelque chose de similaire à votre code ci-dessus: tout mettre sur le côté serveur. J'ai rendu l'objet/zone de contenu visible lorsque certaines conditions ont été remplies, etc. au lieu d'utiliser la syntaxe asp. Travaillé aussi bien. Merci pour l'idée et aussi pour le schéma. – BeraCim

Questions connexes