String Array Property produces Parser Error

R

Rémy Samulski

Dear readers,

I'm having problems with creating a custom control that accepts an
array of strings as a property. First I used the following code which
produced a Parser Error

<Bindable(True), Category(_ClassName)> _
Public Property [MenuItems]() As String()
Get
Return CType(ViewState("__stringMenuItems"), String())
End Get
Set(ByVal Value As String())
ViewState("__stringMenuItems") = Value
End Set
End Property

Afterwards I tried several attributes, one of them
(PersistenceMode(PersistenceMode.InnerDefaultProperty)) produces
additional "html" tags but this doesn't work either.

Does anyone know how to solve this?

Many thanks,
Rémy Samulski
 
M

Mike MacMillan

Rémy,
it is fully possible to create a property who's underlying type is a
string array. rather then dealing with the sizing issues of a static
array though, perhaps you could make that property an Arraylist or
Hashtable?

Mike MacMillan
 
R

Rémy Samulski

Dear Mike,

Thx for replying my question but I don't have any problems with sizing
issues of a string array. What I'm trying to do is to make a custom
control that can be set on design time in Visual Studio.net 2003.
That's why I have chosen a String array and not for example an
ArrayList (which can't be filled on design-time (one can only add
Objects without filling the values). Everything works well except when
I fill the String Array the HTML code of the concerned object is:

<cc1:TabPages id="TabPages4" runat="server" MenuItems="String[]
Array"></cc1:TabPages>

The parser than (after saving and reopening the WebForm) throws an
parser error stating it can't create an object of type
'System.String[]' from its string representation 'String[] Array' for
the 'MenuItems' property.

When I insert the
(PersistenceMode(PersistenceMode.InnerDefaultProperty)) attribute in
the code above (see first post) the HTML code changes to:

<cc1:TabPages id="TabPages5" runat="server">
<System.String Length="4"></System.String>
<System.String Length="8"></System.String>
</cc1:TabPages>

But now the parser return the error: '' could not be set on property
'MenuItems'. Furthermore when I select the view HTML the HTML code
shows the error: The active schema does not support the element
'System.String'.

Anyone an example on how to implement an array property which can be
edited on design time?

Many thanks,
Rémy
 
M

Mike MacMillan

Remy,
it is possible to have a variable represet a string array, but there
will need to be a bit of extra work on your side. if this property
will be hardcoded into the tag, you can build the property perhaps
during the AddParsedSubObject method of the page/control that contains
your custom control. ex:

<cc1:Something someAttrib="12,33,45,66,77,823,12"/>

this could be parsed into an int or string array during the
AddParsedSubObject method (or OnInit, or whatever...). you could even
provide a custom Set accessor for the property that exposes this array,
and parse the deliminated string there. easy answer though, you won't
be able to define on the frontend the contents of the array, you will
need a bit of manual work to make it an array.

Mike
 
R

Rémy Samulski

Dear Mike,

OK this is the "over my head" stuff. Is it possible to add some
attribute to a property that will prevent the value to be set in the
HTML? What I'm proposing is 2 properties: one will be the in the
background property that isn't visible in the IDE (<Browsable(False),
EditorBrowsable(EditorBrowsableState.Never)>). This background property
will be a string that has to be splitted to get the array we want. The
other is a array property that can be edited using the IDE, but it
shouldn't add any values in the HTML part in order to not rise a parser
error.

Hmm, hope it is clear what I'm trying to say =(

Many thanks for your previous answers hope you can help me out with
this,
Rémy
 
M

Mike MacMillan

Remy,
so what you're saying is you'd like to have 2 properties; one will
return string and will hold a delimited set of data, the other will be
an array and will hold the delimited data in a strongly typed array.
further, you'd like the user to modify the array's contents using the
IDE, and have that persist the correct delimited string in the string
property? you will need custom design time support for your control to
set the contents of that property correctly. also, being the IDE can't
see the string property, users coding directly(such as with notepad)
will still see the string property as a valid property to assign to.

Mike MacMillan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,999
Messages
2,570,246
Members
46,841
Latest member
WilmerBelg

Latest Threads

Top