Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Controls > Collection Property in web custom control

Reply
Thread Tools

Collection Property in web custom control

 
 
Class
Guest
Posts: n/a
 
      01-16-2007
Hi all,

I'm building a custom control. I would like that on the control you can set
some 'rights'
For that I have an enum:
public enum GroupRights

{
Group0 = 0,
Group1 = 1,
Group2 = 2,
Group3 = 3,
Group4 = 4,
Group5 = 5,
}

In design time I want to set these right (can be multiple rights at the same
time)
So I put them in a generic list:

[Category("Rights")]
[DefaultValue("")]
[Localizable(true)]
[Bindable(true)]
public List<GroupRights> ControlRights
{
get
{
List<GroupRights> temp = (List<GroupRights>)ViewState["ControlRights"];
return ((object)temp == null) ? new List<GroupRights>() : temp;
}

set
{
ViewState["ControlRights"] = value;
}}

In desgin time I get the controls window with the GrouRights enum to choose
from.
But when I add one right in the collection window I get the message:

Cannot create an object of type
'System.Collections.Generic.List`1[[GroupRights, MaxControls,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its string
representation '(Collection)' for the 'ControlRights' property.

Also the property can not be read out during runtime.

What am I doing wrong or forgetting?

tia,

Class



 
Reply With Quote
 
 
 
 
Michael Tkachev
Guest
Posts: n/a
 
      01-17-2007
Your class must be serializible. Or use Session instead of ViewState.

Sincerely yours,
Michael B. Tkachev.
http://www.velocityreviews.com/forums/(E-Mail Removed)

"Class" <NoSpam@Class> wrote in message
news:(E-Mail Removed)...
> Hi all,
>
> I'm building a custom control. I would like that on the control you can
> set some 'rights'
> For that I have an enum:
> public enum GroupRights
>
> {
> Group0 = 0,
> Group1 = 1,
> Group2 = 2,
> Group3 = 3,
> Group4 = 4,
> Group5 = 5,
> }
>
> In design time I want to set these right (can be multiple rights at the
> same time)
> So I put them in a generic list:
>
> [Category("Rights")]
> [DefaultValue("")]
> [Localizable(true)]
> [Bindable(true)]
> public List<GroupRights> ControlRights
> {
> get
> {
> List<GroupRights> temp = (List<GroupRights>)ViewState["ControlRights"];
> return ((object)temp == null) ? new List<GroupRights>() : temp;
> }
>
> set
> {
> ViewState["ControlRights"] = value;
> }}
>
> In desgin time I get the controls window with the GrouRights enum to
> choose from.
> But when I add one right in the collection window I get the message:
>
> Cannot create an object of type
> 'System.Collections.Generic.List`1[[GroupRights, MaxControls,
> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its string
> representation '(Collection)' for the 'ControlRights' property.
>
> Also the property can not be read out during runtime.
>
> What am I doing wrong or forgetting?
>
> tia,
>
> Class
>
>
>



 
Reply With Quote
 
 
 
 
Class
Guest
Posts: n/a
 
      01-17-2007
Hi Michael,

Thanks for your response.

> Your class must be serializible. Or use Session instead of ViewState.


Which class do you mean, that needs to be serializable?
The enum? or The List class?
The list is a generic .NET collection class which is serializable already,
right?
Session?? There is no Session object in a web custom control, what do you
mean??

Thanks,
Class

"Michael Tkachev" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Your class must be serializible. Or use Session instead of ViewState.
>
> Sincerely yours,
> Michael B. Tkachev.
> (E-Mail Removed)
>
> "Class" <NoSpam@Class> wrote in message
> news:(E-Mail Removed)...
>> Hi all,
>>
>> I'm building a custom control. I would like that on the control you can
>> set some 'rights'
>> For that I have an enum:
>> public enum GroupRights
>>
>> {
>> Group0 = 0,
>> Group1 = 1,
>> Group2 = 2,
>> Group3 = 3,
>> Group4 = 4,
>> Group5 = 5,
>> }
>>
>> In design time I want to set these right (can be multiple rights at the
>> same time)
>> So I put them in a generic list:
>>
>> [Category("Rights")]
>> [DefaultValue("")]
>> [Localizable(true)]
>> [Bindable(true)]
>> public List<GroupRights> ControlRights
>> {
>> get
>> {
>> List<GroupRights> temp = (List<GroupRights>)ViewState["ControlRights"];
>> return ((object)temp == null) ? new List<GroupRights>() : temp;
>> }
>>
>> set
>> {
>> ViewState["ControlRights"] = value;
>> }}
>>
>> In desgin time I get the controls window with the GrouRights enum to
>> choose from.
>> But when I add one right in the collection window I get the message:
>>
>> Cannot create an object of type
>> 'System.Collections.Generic.List`1[[GroupRights, MaxControls,
>> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its string
>> representation '(Collection)' for the 'ControlRights' property.
>>
>> Also the property can not be read out during runtime.
>>
>> What am I doing wrong or forgetting?
>>
>> tia,
>>
>> Class
>>
>>
>>

>
>



 
Reply With Quote
 
Michael Tkachev
Guest
Posts: n/a
 
      01-18-2007
Take the "Page" property and there you can find Session

"Class" <NoSpam@Class> wrote in message
news:(E-Mail Removed)...
> Hi Michael,
>
> Thanks for your response.
>
>> Your class must be serializible. Or use Session instead of ViewState.

>
> Which class do you mean, that needs to be serializable?
> The enum? or The List class?
> The list is a generic .NET collection class which is serializable already,
> right?
> Session?? There is no Session object in a web custom control, what do you
> mean??
>
> Thanks,
> Class
>
> "Michael Tkachev" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
>> Your class must be serializible. Or use Session instead of ViewState.
>>
>> Sincerely yours,
>> Michael B. Tkachev.
>> (E-Mail Removed)
>>
>> "Class" <NoSpam@Class> wrote in message
>> news:(E-Mail Removed)...
>>> Hi all,
>>>
>>> I'm building a custom control. I would like that on the control you can
>>> set some 'rights'
>>> For that I have an enum:
>>> public enum GroupRights
>>>
>>> {
>>> Group0 = 0,
>>> Group1 = 1,
>>> Group2 = 2,
>>> Group3 = 3,
>>> Group4 = 4,
>>> Group5 = 5,
>>> }
>>>
>>> In design time I want to set these right (can be multiple rights at the
>>> same time)
>>> So I put them in a generic list:
>>>
>>> [Category("Rights")]
>>> [DefaultValue("")]
>>> [Localizable(true)]
>>> [Bindable(true)]
>>> public List<GroupRights> ControlRights
>>> {
>>> get
>>> {
>>> List<GroupRights> temp = (List<GroupRights>)ViewState["ControlRights"];
>>> return ((object)temp == null) ? new List<GroupRights>() : temp;
>>> }
>>>
>>> set
>>> {
>>> ViewState["ControlRights"] = value;
>>> }}
>>>
>>> In desgin time I get the controls window with the GrouRights enum to
>>> choose from.
>>> But when I add one right in the collection window I get the message:
>>>
>>> Cannot create an object of type
>>> 'System.Collections.Generic.List`1[[GroupRights, MaxControls,
>>> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its string
>>> representation '(Collection)' for the 'ControlRights' property.
>>>
>>> Also the property can not be read out during runtime.
>>>
>>> What am I doing wrong or forgetting?
>>>
>>> tia,
>>>
>>> Class
>>>
>>>
>>>

>>
>>

>
>



 
Reply With Quote
 
Nathaniel Greene
Guest
Posts: n/a
 
      01-20-2007
Whoa, Whoa, Whoa, Whoa.
Remember that a session should only be used to store information when this
information is stored on a "per" user basis. What if you have 30 of these
controls on a single web page and the user is browsing 2 different web pages
at the same time ont he same site under the same session. That's 60 controls
overwriting each other.

Class, what is happening is the fact that you are trying to serialize Enums.
Your first step should be to convert your List<EnumRights> to a enumrights[],
this is done through the .ToArray() method.
Do this when you save your items in the viewstaet. When you load your
viewstaet you can create a new List<EnumRights> by using the
MyEnumRights = new List<EnumRights>((List<Enumrights>) viewstate["bleah"]);

The Constructor overload for a List<> accepts Ienumerable which a type[]
implements so this works. This should solve all of your serialization
problems. Worst case scenario - you may have to, assuming your enums have
values, convert it to an array of integers - but I don't think you have to do
this.



"Michael Tkachev" wrote:

> Take the "Page" property and there you can find Session
>
> "Class" <NoSpam@Class> wrote in message
> news:(E-Mail Removed)...
> > Hi Michael,
> >
> > Thanks for your response.
> >
> >> Your class must be serializible. Or use Session instead of ViewState.

> >
> > Which class do you mean, that needs to be serializable?
> > The enum? or The List class?
> > The list is a generic .NET collection class which is serializable already,
> > right?
> > Session?? There is no Session object in a web custom control, what do you
> > mean??
> >
> > Thanks,
> > Class
> >
> > "Michael Tkachev" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> >> Your class must be serializible. Or use Session instead of ViewState.
> >>
> >> Sincerely yours,
> >> Michael B. Tkachev.
> >> (E-Mail Removed)
> >>
> >> "Class" <NoSpam@Class> wrote in message
> >> news:(E-Mail Removed)...
> >>> Hi all,
> >>>
> >>> I'm building a custom control. I would like that on the control you can
> >>> set some 'rights'
> >>> For that I have an enum:
> >>> public enum GroupRights
> >>>
> >>> {
> >>> Group0 = 0,
> >>> Group1 = 1,
> >>> Group2 = 2,
> >>> Group3 = 3,
> >>> Group4 = 4,
> >>> Group5 = 5,
> >>> }
> >>>
> >>> In design time I want to set these right (can be multiple rights at the
> >>> same time)
> >>> So I put them in a generic list:
> >>>
> >>> [Category("Rights")]
> >>> [DefaultValue("")]
> >>> [Localizable(true)]
> >>> [Bindable(true)]
> >>> public List<GroupRights> ControlRights
> >>> {
> >>> get
> >>> {
> >>> List<GroupRights> temp = (List<GroupRights>)ViewState["ControlRights"];
> >>> return ((object)temp == null) ? new List<GroupRights>() : temp;
> >>> }
> >>>
> >>> set
> >>> {
> >>> ViewState["ControlRights"] = value;
> >>> }}
> >>>
> >>> In desgin time I get the controls window with the GrouRights enum to
> >>> choose from.
> >>> But when I add one right in the collection window I get the message:
> >>>
> >>> Cannot create an object of type
> >>> 'System.Collections.Generic.List`1[[GroupRights, MaxControls,
> >>> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its string
> >>> representation '(Collection)' for the 'ControlRights' property.
> >>>
> >>> Also the property can not be read out during runtime.
> >>>
> >>> What am I doing wrong or forgetting?
> >>>
> >>> tia,
> >>>
> >>> Class
> >>>
> >>>
> >>>
> >>
> >>

> >
> >

>
>
>

 
Reply With Quote
 
Class
Guest
Posts: n/a
 
      01-22-2007
Hi Nathaniel,

Thank you for your response.
When I try your suggestion and I try to add a right in the colleciton
Editor:
'Unable to cast object of type
'System.Collections.Generic.List`1[GroupRights]' to type
'System.Collections.Generic.List`1[GroupRights]''

This is the code I have now:
public List<GroupRights> Rights
{
get
{
if (ViewState["Rights"] != null)
{
List<GroupRights> s = new
List<GroupRights>((IEnumerable<GroupRights>)ViewSt ate["Rights"]);
return ((s == null) ? new List<GroupRights>() : s);
}
else
{
return null;
}
}
set
{
if (value != null)
ViewState["Rights"] = value.ToArray();
else
{
List<GroupRights> s = new List<GroupRights>();
s.Add((GroupRights)1);
ViewState["LikMe"] = s;
}
}
}

Regards,
Maarten

"Nathaniel Greene" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Whoa, Whoa, Whoa, Whoa.
> Remember that a session should only be used to store information when this
> information is stored on a "per" user basis. What if you have 30 of these
> controls on a single web page and the user is browsing 2 different web
> pages
> at the same time ont he same site under the same session. That's 60
> controls
> overwriting each other.
>
> Class, what is happening is the fact that you are trying to serialize
> Enums.
> Your first step should be to convert your List<EnumRights> to a
> enumrights[],
> this is done through the .ToArray() method.
> Do this when you save your items in the viewstaet. When you load your
> viewstaet you can create a new List<EnumRights> by using the
> MyEnumRights = new List<EnumRights>((List<Enumrights>)
> viewstate["bleah"]);
>
> The Constructor overload for a List<> accepts Ienumerable which a type[]
> implements so this works. This should solve all of your serialization
> problems. Worst case scenario - you may have to, assuming your enums have
> values, convert it to an array of integers - but I don't think you have to
> do
> this.
>
>
>
> "Michael Tkachev" wrote:
>
>> Take the "Page" property and there you can find Session
>>
>> "Class" <NoSpam@Class> wrote in message
>> news:(E-Mail Removed)...
>> > Hi Michael,
>> >
>> > Thanks for your response.
>> >
>> >> Your class must be serializible. Or use Session instead of ViewState.
>> >
>> > Which class do you mean, that needs to be serializable?
>> > The enum? or The List class?
>> > The list is a generic .NET collection class which is serializable
>> > already,
>> > right?
>> > Session?? There is no Session object in a web custom control, what do
>> > you
>> > mean??
>> >
>> > Thanks,
>> > Class
>> >
>> > "Michael Tkachev" <(E-Mail Removed)> wrote in message
>> > news:(E-Mail Removed)...
>> >> Your class must be serializible. Or use Session instead of ViewState.
>> >>
>> >> Sincerely yours,
>> >> Michael B. Tkachev.
>> >> (E-Mail Removed)
>> >>
>> >> "Class" <NoSpam@Class> wrote in message
>> >> news:(E-Mail Removed)...
>> >>> Hi all,
>> >>>
>> >>> I'm building a custom control. I would like that on the control you
>> >>> can
>> >>> set some 'rights'
>> >>> For that I have an enum:
>> >>> public enum GroupRights
>> >>>
>> >>> {
>> >>> Group0 = 0,
>> >>> Group1 = 1,
>> >>> Group2 = 2,
>> >>> Group3 = 3,
>> >>> Group4 = 4,
>> >>> Group5 = 5,
>> >>> }
>> >>>
>> >>> In design time I want to set these right (can be multiple rights at
>> >>> the
>> >>> same time)
>> >>> So I put them in a generic list:
>> >>>
>> >>> [Category("Rights")]
>> >>> [DefaultValue("")]
>> >>> [Localizable(true)]
>> >>> [Bindable(true)]
>> >>> public List<GroupRights> ControlRights
>> >>> {
>> >>> get
>> >>> {
>> >>> List<GroupRights> temp =
>> >>> (List<GroupRights>)ViewState["ControlRights"];
>> >>> return ((object)temp == null) ? new List<GroupRights>() : temp;
>> >>> }
>> >>>
>> >>> set
>> >>> {
>> >>> ViewState["ControlRights"] = value;
>> >>> }}
>> >>>
>> >>> In desgin time I get the controls window with the GrouRights enum to
>> >>> choose from.
>> >>> But when I add one right in the collection window I get the message:
>> >>>
>> >>> Cannot create an object of type
>> >>> 'System.Collections.Generic.List`1[[GroupRights, MaxControls,
>> >>> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its
>> >>> string
>> >>> representation '(Collection)' for the 'ControlRights' property.
>> >>>
>> >>> Also the property can not be read out during runtime.
>> >>>
>> >>> What am I doing wrong or forgetting?
>> >>>
>> >>> tia,
>> >>>
>> >>> Class
>> >>>
>> >>>
>> >>>
>> >>
>> >>
>> >
>> >

>>
>>
>>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Collection problems (create Collection object, add data to collection, bind collection to datagrid) Řyvind Isaksen ASP .Net 1 05-18-2007 09:24 AM
Collection Property in web custom control Class ASP .Net Building Controls 5 01-22-2007 10:22 AM
ASP.NET Custom control with collection property -=Chris=- ASP .Net 2 05-23-2004 06:46 AM
where to define my custom control schema & collection property... (2 questions) Lloyd Dupont ASP .Net 0 07-27-2003 12:07 PM
Web Custom Control & Custom Collection problem Donald Simpson ASP .Net Web Controls 0 07-11-2003 07:52 AM



Advertisments