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;
pril - torek, 09. januar 2007
Verjetno bi bilo bolje da bi rešil "napako" da dvakrat nalaga user kontrolo... to verjetno pobira tudi zmogljivosti strežnika? Drugače pa - če objekta ne moreš serializirat se da rešita tako da iz objekta pobereš vse njegove vrednosti (objekte, lahko pa š ločeno kakega ki tudi na za serializirat) in potem odpreš novega in vrednosti nazaj not zapišeš (uporabi reflection, da ne boš vsake lastnosti posebej pisal) lp, pl
bojanv - sreda, 03. januar 2007
Priporočam, da daš filename v ViewState, pdc pa v Cache (Cache se ti splača, ker lahko nastavljaš dependcy-e)...Naredi property-je, in jim dodaj atribute ( magar kake editorje al pa designerje, bindanje, če boš mel kaj takega....) pa s property-i nadzoruj kontrolo....Še vedno lahko daš navzven metode, ki ti bodo omogočale kontrolo.Ker delaš z dinamičnimi kontrolami, priporočam branje tega članka, ki ti bo pojasnil marsikaj.
AndrejT - sreda, 03. januar 2007
Še glede objekta Application - ga v 2.0 ne uporabljaj sploh, ker je zastarel; uporabi raje Cache...
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: UrejajGlavni fUG = (UrejajGlavni)LoadControl(pFileName); //fUG je UserControl-a na katerem imam različne edite. Vse te pa dedujejo iz UrejajGlavni objekta, ki pa je zaenkra prazen fUG.SetStartVariables(pDataController); pcUrejaj.Controls.Add(fUG); //pcUrejaj = ASPxPopupControlV pFileName pa mu podam ime ascx file-a. Ta file ima takle zapis:<%@ Control Language="C#" AutoEventWireup="true" CodeFile="poste.ascx.cs" Inherits="sifranti_userControls_urejanje_poste" CodeFileBaseClass ="UrejajGlavni"%> Č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 še vedno na false. public partial class sifranti_userControls_Urejaj : System.Web.UI.UserControl{ private ASPxDataController oDC; private string oFileName; protected void Page_Load(object sender, EventArgs e) { UrejajGlavni fUG = (UrejajGlavni)LoadControl("urejanje/poste.ascx"); fUG.SetStartVariables(null); pcUrejaj.Controls.Add(fUG); } public void SetStartVariables(ASPxDataController pDC, string pFileName) { oDC = pDC; oFileName = pFileName; }}
bojanv - sreda, 03. januar 2007
fora: Obstaja še kakš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, kar pomeni, da lahko eden spreminja vrednost, ki jo je zapisal drugi user pa je ne bi smel. 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. Če nimaš ogromno podatkov, uporabi to. Session ni na klientu (na klientu je 120 bitni ključ, ki identificira Session). Session je "in-memory cache of object references that live within the IIS process", razen če specificiraš drugače. Lahko uporabiš različne metode pridobivanja in shranjevanja sej. Recimo, shranjuješ svoje seje v Sql Server itd. Več o tem imaš tule.
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širaš (shraniš v Cache), vendar bodi previden - če ne potrebuješ shranjevanja stanja objekta, objekta ne shranjuj.
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šam, zakaj si sploh želiš shranjevati stanje tega objekta, pa naj bo to kamorkoli - v profile, session, ...? Se mi namreč zdi popolnoma odveč in nepotrebno.
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šil ta problem.Logika projekta.Na PageLoad kličem eno metodo SetStartVariable in tukaj noter nastavim objektu (userControli) 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 še kakš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.
MihaM - sreda, 03. januar 2007
Pa ja ne boš spravljal zraven še uporabniških kontrol, ja? Daj ti lepo fPS.DataController referenco na null pa potem shrani.BTW, zakaj sploh potrebuješ tisto referenco?