2009-11-11 4 views
0

Je génère du code html dans le chargement de la page et à cause de cela je demande la base de données une fois. dans la page je interroge à nouveau la base de données et met les données en HTML avec le code en ligne.code asp.net derrière la variable

Ma question est est-il une meilleure façon de le faire? Je ne veux pas interroger la base de données à chaque fois et atteindre ces variables remplies du code en ligne. quelque chose comme page.addVariable dans page_load et atteindre ceux qui en ligne comme page.variables [ « variableName »]

merci à l'avance

+0

Pouvez-vous obtenir un extrait de code pour nous? – JustLoren

Répondre

3

Si je comprends ce que vous demandez, vous pouvez faire un accesseur et le mettre à Protected . Cela vous permettra d'y accéder depuis la page.

Si vous souhaitez empêcher l'appel de la base de données sur les rappels, vous pouvez toujours ajouter les informations à l'état d'affichage sur la page.

Informations sur l'état d'affichage, les champs cachés et les cookies: http://www.csharphelp.com/archives/archive207.html

+0

Je pense que viewstate est le meilleur moyen d'y aller, car c'est tout à propos de cette page, pas de session ou d'application. quand j'ai essayé d'ajouter et obtenir ProfileCommon de viewstate il lance System.Runtime.Serialization.SerializationException: Type 'ProfileCommon' dans Assembly 'App_Code ._- aako5a, Version = 0.0.0.0, Culture = neutre, PublicKeyToken = null' n'est pas marqué comme sérialisable. exception? –

+0

c'est un problème de sérialisation, j'essaierai de trouver un lien qui en parle et de l'avoir dans peu de temps. – kemiller2002

1

Je ne sais pas si c'est ce que vous êtes après, mais vous pouvez utiliser un HiddenField pour stocker les données que vous voulez sur la page. En outre, si vous n'avez pas besoin d'être sur la page, vous pouvez utiliser Session ou ViewState.

Voici un exemple d'utilisation ViewState comme une propriété (NB vous pouvez échanger ViewState avec session, regardez les liens que je vous ai donné une explication entre les deux.):

public string YourProperty 
{ 
    get 
    { 
     object content = ViewState["YourProperty"]; 
     if (content == null) 
     { 
      return string.Empty; 
     } 
     return content.ToString(); 
    } 
    set 
    { 
     ViewState["YourProperty"] = value; 
    } 
} 

Notez que tout ce que vous mis en ViewState ou doit être marqué comme sérialisable.

S'il s'agit d'une classe assez simple, marquez simplement la classe avec la balise [Serializable].

+0

Cela ne fonctionnera pas comme objet! = Chaîne. Mieux vaut faire quelque chose comme 'return (chaîne) (ViewState ["YourProperty"] ?? "")' –

+1

Oui, il le fera. ViewState est renvoyé en tant qu'objet. Je préfère faire une comparaison sur l'objet retourné en premier pour m'assurer qu'il y a une valeur.De cette façon, je ne dois jamais compter sur la définition de la valeur avant de pouvoir l'utiliser/vérifier. Peut-être en utilisant le ?? Le symbole nettoierait légèrement le code, mais c'est un de ces symboles dont je n'ai jamais été fan. – GenericTypeTea

+0

@Jan, chaque objet a une méthode ToString. –

0

Les données que vous extrayez de la page de base de données sont-elles spécifiques, spécifiques à l'utilisateur ou globales à l'ensemble de l'application?

Si les données sont spécifiques à l'utilisateur, vous pouvez utiliser Session State.

Si les données sont globales pour l'ensemble de l'application, vous pouvez utiliser Application State. Quelle que soit votre utilisation, vous pouvez implémenter la récupération de données dans Session_Start (sera appelée une seule fois pour chaque utilisateur) ou Application_Start (sera appelée une seule fois lorsque l'application Web démarre) dans un fichier Global.asax.

+0

c'est à peu près à cette page et viewstate est la meilleure façon de faire. mais maintenant je reçois une exception à propos de ProfileCommon n'est pas sérialisable :) –

Questions connexes