de ce un obiect creat în codul din spate nu este disponibil în pagina aspx?

Am o întrebare simplă. Atunci când creăm un obiect în codul din spatele (". Aspx.cs"), de ce nu este disponibil în pagina aspx.

De exemplu, dacă am o clasă (prezentă într-un alt fișier .cs și nu în codul din spatele) și în acea clasă am o proprietate declarată, permiteți-i să spuneți "Nume".

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

Acum când creez un obiect, permiteți să spui "obj" în codul din spatele (". Aspx.cs"), cu domeniul de aplicare în cadrul clasei parțiale.

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

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

Folosind acest obiect "obj" pot accesa proprietatea. Atunci de ce nu pot folosi același obiect "obj" pentru a obține proprietatea în pagina aspx în acest mod,

<%= obj.Name%>
0

1 răspunsuri

Acum când creez un obiect, permiteți să spui "obj" în cod   în spatele (". aspx.cs"), folosind acest obiect "obj" pot accesa proprietatea

Nu este clar cum ați creat exact această instanță obj . Dacă este o variabilă locală în interiorul unei metode din codul din spate, este evident că domeniul de aplicare al acestei variabile este metoda în sine, astfel încât să nu o puteți accesa în pagina ASPX.

În pagina ASPX puteți accesa numai membrii WebFormului curent care sunt definiți în codul din spate. Deci acest obj trebuie să fie instanțiat undeva. De exemplu, puteți avea o proprietate în codul dvs. în spatele:

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

și apoi în pagina ASPX ați putea accesa:

<%= MyObj.Name %>

Să luăm un alt exemplu care vă permite să inițializați proprietatea, de exemplu în evenimentul Page_Load :

protected SomeType MyObj { get; private set; }

protected void Page_Load(object sender, EventArgs e)
{
    MyObj = new SomeType();
}
0
adăugat
Obiectul "obj" are o sferă de aplicare în clasa parțială, în codul din spatele și nu în interiorul niciunei funcții.
adăugat autor Bibhu, sursa
@Darin Dimitrov - Actualizat întrebarea mea.
adăugat autor Bibhu, sursa
@Darin Dimitrov - Multumesc, functioneaza :). Mai am o întrebare pe care am încercat-o, făcând-o publică (din curiozitate), dar nu a funcționat, poate să vă rog explicați-mi.
adăugat autor Bibhu, sursa
@ Darin Dimitrov - da da. Munca sa, a făcut o greșeală proastă. Mulți Mulți vă mulțumesc, ați învățat multe de la dvs. :)
adăugat autor Bibhu, sursa
@Bibhu: Cheia aici este protejată , nu puteți accesa membrii private într-o clasă derivată.
adăugat autor leppie, sursa
Puteți arăta exact cum este definit codul obj în codul dvs. în spatele dacă acesta nu se află în interiorul unei funcții? Aveți o proprietate sau ceva de genul ăsta? Care este vizibilitatea lui?
adăugat autor Darin Dimitrov, sursa
Mulțumiri. Acum este clar. Variabila dvs. obj este privată, astfel încât să nu o puteți accesa în pagina ASPX. Efectuați-l protejat: protected SOPriceList obj = new SOPriceList (); . Probabil ați putea întreba: dar de ce este privat obj ? Și răspunsul este că atunci când nu specificați un modificator de vizibilitate atunci când declarați un câmp într-o clasă, compilatorul C# presupune private .
adăugat autor Darin Dimitrov, sursa
public ar trebui să funcționeze. Are un nivel de vizibilitate mai mare decât protected . Când spui că nu funcționează , poți să fii mai specific, te rog? Ce nu a funcționat? Ați primit un mesaj de eroare? Dacă da, ce mesaj de eroare ați primit?
adăugat autor Darin Dimitrov, sursa