pourquoi un objet créé dans le code derrière n'est pas disponible dans la page ASPX?

J'ai une question simple. Lorsque nous créons un objet dans le code derrière (". Aspx.cs"), pourquoi n'est-il pas disponible dans la page aspx.

Par exemple, si j'ai une classe (présente dans un autre fichier .cs et pas dans le code derrière) et dans cette classe j'ai une propriété déclarée, disons "Nom".

namespace BLL.SO
{
    public class SOPriceList
    {
        private string _name;
        public string Name
        {
            get { return _name;}
            set { _name = value; }
        }
    }
}

Maintenant, quand je crée un objet, disons "obj" dans le code derrière (". Aspx.cs"), avec la portée dans la classe partielle.

namespace Modules.SO
{    
    public partial class PriceListRecordView : PageBase
    {
        SOPriceList obj = new SOPriceList();

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

En utilisant cet objet "obj" je peux accéder à la propriété. Alors pourquoi ne puis-je pas utiliser le même objet "obj" pour obtenir la propriété dans la page aspx de cette manière,

<%= obj.Name%>
0

1 Réponses

Maintenant, quand je crée un objet, disons "obj" dans le code   derrière (". aspx.cs"), en utilisant cet objet "obj" je peux accéder à la propriété

On ne sait pas exactement comment vous avez créé cette instance obj . Si c'est une variable locale à l'intérieur d'une méthode dans le code, il est évident que la portée de cette variable est la méthode elle-même, donc vous ne pouvez pas y accéder dans la page ASPX.

Dans la page ASPX, vous pouvez uniquement accéder aux membres du WebForm actuel qui sont définis dans le code derrière. Donc, cet obj doit être instancié quelque part. Vous pourriez par exemple avoir une propriété dans votre code derrière:

protected SomeType MyObj
{
    get 
    {
        return ... some instance
    }
}

puis dans la page ASPX vous pouvez y accéder:

<%= MyObj.Name %>

Prenons un autre exemple qui vous permet d'initialiser la propriété par exemple dans l'événement Page_Load :

protected SomeType MyObj { get; private set; }

protected void Page_Load(object sender, EventArgs e)
{
    MyObj = new SomeType();
}
0
ajouté
L'objet "obj" a une portée dans la classe partielle, dans le code derrière et non dans une fonction.
ajouté l'auteur Bibhu, source
@Darin Dimitrov - Mise à jour ma question.
ajouté l'auteur Bibhu, source
@Darin Dimitrov - Merci, ça marche :). J'ai plus question que j'ai essayé, en le rendant public à la place (par curiosité) mais cela n'a pas fonctionné, pouvez-vous m'expliquer s'il vous plaît.
ajouté l'auteur Bibhu, source
@Darin Dimitrov - oh oui. Son fonctionnement, a fait une erreur stupide. Beaucoup Merci à vous, beaucoup appris de vous. :)
ajouté l'auteur Bibhu, source
@Bibhu: La clé ici est protected , vous ne pouvez pas accéder aux membres private dans une classe dérivée.
ajouté l'auteur leppie, source
Pourriez-vous montrer comment exactement obj est défini dans votre code si ce n'est pas dans une fonction? Vous avez une propriété ou quelque chose? Quelle est sa visibilité?
ajouté l'auteur Darin Dimitrov, source
Merci. C'est clair maintenant. Votre variable obj est privée, vous ne pouvez donc pas y accéder dans la page ASPX. Faites-le protégé: protected SOPriceList obj = new SOPriceList (); . Vous pourriez probablement demander: mais pourquoi obj est-il privé? Et la réponse est que lorsque vous ne spécifiez pas un modificateur de visibilité lors de la déclaration d'un champ dans une classe, le compilateur C# suppose private .
ajouté l'auteur Darin Dimitrov, source
public devrait fonctionner. Il a même un niveau de visibilité supérieur à protected . Quand vous dites ça n'a pas fonctionné pourriez-vous être un peu plus précis s'il vous plaît? Qu'est-ce qui n'a pas fonctionné? As-tu eu un message d'erreur? Si oui, quel message d'erreur avez-vous reçu?
ajouté l'auteur Darin Dimitrov, source