Zapis objekta v Profile

Rad bi zapisal en objekt v profile, vendar mi javi napako:

Type 'DevExpress.Web.ASPxDataControls.ASPxDataController' in Assembly 'DevExpress.Web.ASPxDataControls.v6.3, Version=6.3.2.0, Culture=neutral, PublicKeyToken=79868b8147b5eae4' is not marked as serializable.

Lahko ta objekt zapišem tudi v session, vendar bi ga veliko raje videl v Profile. Objekt je neka third part komponenta in ne morem dostopati do njega in ga popravljati

 V web.config ga mam zapisanega takole:

<add name="Objekt" type="MojObjekt" allowAnonymous="true" serializeAs="Binary" /> 

Klic: 

        MojObjekt fPS = new MojObjekt();
        fPS.DataController = pDC;
        fPS.FileName = pFileName;
        Profile.Objekt = fPS;

Avtor: fora, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

pril
pril - torek, 09. januar 2007

Verjetno bi bilo bolje da bi re&scaron;il &quot;napako&quot; da dvakrat nalaga user kontrolo... to verjetno pobira tudi zmogljivosti strežnika? Drugače pa - če objekta ne more&scaron; serializirat se da re&scaron;ita tako da iz objekta pobere&scaron; vse njegove vrednosti (objekte, lahko pa &scaron; ločeno kakega ki tudi na za serializirat)&nbsp;in potem odpre&scaron; novega in vrednosti nazaj not zapi&scaron;e&scaron; (uporabi reflection, da ne bo&scaron; vsake lastnosti posebej pisal)&nbsp;lp, pl

bojanv
bojanv - sreda, 03. januar 2007

Priporočam, da da&scaron; filename v ViewState, pdc pa v Cache (Cache se ti splača, ker lahko nastavlja&scaron; dependcy-e)...Naredi property-je, in jim dodaj atribute ( magar kake editorje al pa designerje, bindanje, če bo&scaron; mel kaj takega....) pa s property-i nadzoruj kontrolo....&Scaron;e vedno lahko da&scaron; navzven metode, ki ti bodo omogočale kontrolo.Ker dela&scaron; z dinamičnimi kontrolami, priporočam branje tega članka, ki ti bo pojasnil marsikaj.

AndrejT
AndrejT - sreda, 03. januar 2007

&Scaron;e glede objekta Application - ga v 2.0 ne uporabljaj sploh, ker je zastarel; uporabi raje Cache...

fora
fora - sreda, 03. januar 2007

Ja problemom mi noče zmankati.Kot sem rekel, imam na stran.aspx na PageLoad klic metode: UserKontrola.SetStartVariables(...); In v večini primerov to lepo dela, tako kot bi si želel. Problem pa nastane pri Devexpress-ovi PopupControl-i.Imam takole kodo: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UrejajGlavni fUG = (UrejajGlavni)LoadControl(pFileName);&nbsp;&nbsp; //fUG je UserControl-a na katerem imam različne edite. Vse te pa dedujejo iz UrejajGlavni objekta, ki pa je zaenkra prazen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fUG.SetStartVariables(pDataController);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcUrejaj.Controls.Add(fUG); //pcUrejaj = ASPxPopupControlV pFileName pa mu podam ime ascx file-a. Ta file ima takle zapis:&lt;%@ Control Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;poste.ascx.cs&quot; Inherits=&quot;sifranti_userControls_urejanje_poste&quot; CodeFileBaseClass =&quot;UrejajGlavni&quot;%&gt; Če imam zgornjo kodo napisano v SetStartVariables, mi pcUrejaj (ASPxPopupControl) ne prikaže userControle, ki sem jo naložil (LoadControl).Če pa tistele zgornje 3 vrstice kode prestavim v PageLoad, potem pa mi pcUrejaj pokaže UserControl-o ki jo naložim. Vendar pa se ob drugem klicu izgubijo objekte variable, IsPostBack pa je &scaron;e vedno na false.&nbsp;&nbsp;public partial class sifranti_userControls_Urejaj : System.Web.UI.UserControl{&nbsp;&nbsp;&nbsp; private ASPxDataController oDC;&nbsp;&nbsp;&nbsp; private string oFileName;&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UrejajGlavni fUG = (UrejajGlavni)LoadControl(&quot;urejanje/poste.ascx&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fUG.SetStartVariables(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcUrejaj.Controls.Add(fUG);&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; public void SetStartVariables(ASPxDataController pDC, string pFileName)&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oDC = pDC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oFileName = pFileName;&nbsp;&nbsp;&nbsp; }}

bojanv
bojanv - sreda, 03. januar 2007

fora: Obstaja &scaron;e kak&scaron;en drug objekt, v katerega bi lahko to shranjeval. Sedaj ne vem kako je z Application objektom. Koliko časa je ta živ. Ali umre (application objekt), ko se celotna stran naloži?Application je namenjen shranjevanju spremenljivk globalno in ne per user. Je dostopna skozi celotno aplikacijo vsem uporabnikom,&nbsp;kar pomeni, da lahko eden spreminja vrednost, ki jo je zapisal drugi user pa je ne bi smel.&nbsp;Spremenljivka v Application state-u je živa, dokler ni zamenjana ali dokler ni uničena, kar se pa zgodi, ko se zadnja instanca iz HttpApplication pool-a prekine ( se pokliče Application_End event - prva se nardi, ko se prvič pokliče stran). Application ne umre, ko se celotna stran naloži (če govoriva o prvem zagonu, refresh-u ali redirekciji ....)... fora:Session-a ne maram, ker je na clientu in to me moti.&nbsp;Če nima&scaron; ogromno podatkov, uporabi to. Session ni na klientu (na klientu je 120 bitni ključ, ki identificira Session). Session je &quot;in-memory cache of object references that live within the IIS process&quot;, razen če specificira&scaron; drugače. Lahko uporabi&scaron; različne metode pridobivanja in shranjevanja sej. Recimo, shranjuje&scaron; svoje seje v Sql Server itd. Več o tem ima&scaron; tule.

AndrejT
AndrejT - sreda, 03. januar 2007

Glede na tvoj drugi opis je kontrolnikov event PageLoad malo prezgodnji čas, da bi dobil vrednosti spremenljivk, raje namesto tega kontrolniku dodaj neko metodo in izvedi logiko tam.Objekte sicer lahko ke&scaron;ira&scaron; (shrani&scaron; v Cache), vendar bodi previden - če ne potrebuje&scaron; shranjevanja stanja objekta, objekta ne shranjuj.

AndrejT
AndrejT - sreda, 03. januar 2007

Opis napake pove, da objekt ni namenjen serializaciji, kar je glede na njegovo namembnost (data controller?) nekje razumljivo... Lahko najprej vpra&scaron;am, zakaj si sploh želi&scaron; shranjevati stanje tega objekta, pa naj bo to kamorkoli - v profile, session, ...? Se mi namreč zdi popolnoma odveč in nepotrebno.

fora
fora - sreda, 03. januar 2007

Zakaj shranjevati v Profile? Imam problem, da se mi UserControle nalagajo dvakrat. Isti problem kot v eni niti na temu forumu.Pomislil sem, da bi lahko stvari shranjeval v Profile in tako re&scaron;il ta problem.Logika projekta.Na PageLoad kličem eno metodo SetStartVariable in tukaj noter nastavim objektu (userControli)&nbsp; neke spremenljivke. Te spremenljivke potem uporabljam na PageLoad (od UserControle). In ko gre prvič skozi je vse vredu, ko pa gre drugič skozi, pa so vse te objektne spremenljivke, ki sem jih prej nastavil v SetStartVariables null.Obstaja &scaron;e kak&scaron;en drug objekt, v katerega bi lahko to shranjeval. Sedaj ne vem kako je z Application objektom. Koliko časa je ta živ. Ali umre (application objekt), ko se celotna stran naloži?Session-a ne maram, ker je na clientu in to me moti.&nbsp;

MihaM
MihaM - sreda, 03. januar 2007

Pa ja ne bo&scaron; spravljal zraven &scaron;e uporabni&scaron;kih kontrol, ja? Daj ti lepo fPS.DataController referenco na null pa potem shrani.BTW, zakaj sploh potrebuje&scaron; tisto referenco?