Starší komentáře ke článku: Komplexní vlastnosti a jejich stav v ASP.NET

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: vp

Datum vložení: 19.1.2005 23:02:12

Po dvou dnech studování na internetu jsem našel první ČESKÝ článek popisující náznakem parametry určující chování ovládacího prvku a uložení "komplexních" vlastností.
Hodně mi pomohl, nicméně mám následující problém. Potřebuji napsat uživatelský prvek, jehož vlastnost je kolekce.

Prvky tvořící kolekci:
Public Class mZalozka
Public Property TextNadpis() As String ...
Public Property NavigateUrl() As String ...
Public Property CommandArgument() As String ...
End Class

Potom vlastní kolekce:
Public Class mZalozky
Inherits CollectionBase
Default Public ReadOnly Property Item(ByVal index As Integer) As mZalozka...
Public Sub Add(ByRef Zalozka As mZalozka)....
Public Sub Remove(ByVal index As Integer)....
End Class

Nakonec vlastní ovládací prvkek:
<DefaultProperty("Tabs"), ToolboxData("<{0}:mTab runat=server></{0}:mTab>"), ParseChildren(True, "Tabs"), PersistChildren(False)> _
Public Class mTab
Inherits System.Web.UI.WebControls.WebControl
Implements IPostBackEventHandler
...
Private _active_tab As Integer = 1
Private _images_path As String = "tab/"
Private _zalozky As New mZalozky
Private _Css As String = ""
Private _CssActiveTab As String = ""
...
a mezi vlastnosti prvku i:

<Category("Misc"), Browsable(True), PersistenceMode(PersistenceMode.InnerDefaultProperty), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(True)> _
Public Property Tabs() As mZalozky
Get
Return _zalozky
End Get
Set(ByVal Value As mZalozky)
_zalozky = Value
End Set
End Property...

Pro vykreslení je použita
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)...

Po umístění prvku na stránku v design módu (VS.NET) se dají nastavit všechny vlastnosti vč. kolekce vlastností a prvek se renderuje korektně:

<mc:mTab id="MTab35" runat="server" CssClass="nm1">
<mc:mZalozka NavigateUrl="" TextNadpis="Text1" CommandArgument="t1"></mc:mZalozka>
<mc:mZalozka NavigateUrl="" TextNadpis="Text2" CommandArgument="t2"></mc:mZalozka>
</mc:mTab>

Pokud nyní projekt zkompiluju, výsledná HTML stránka je naprosto korektní. ALE jakmile se vrátím zpět do designeru VS.NET, vykreslí se ovládací prvek šedě - Error Creating Control - s popiskem '' could not be set on property 'Tabs'. Nezbývá než prvek smazat, umístit na stránku, nastavit parametry atd.

Projekt je ve VB.NET, snad Vám to nevadí :). Vím že reaguju se velkým odstupem od napsání článku, ale doufám, že k Vám můj dotaz dorazí a těším se na jakoukoliv radu.

VP

Avatar

Autor komentáře: Jan Novák

Datum vložení: 22.2.2007 15:01:18

Dobrý den, Skoda, ze na predchozi dotaz nikdo neodpovedel. Mam ten sami problem. Pripadne pokud na to jiz autor dotazu prisel, neslo by sem vlozit reseni?

Avatar

Autor komentáře: Petr Podhorský

Datum vložení: 13.1.2008 0:05:57

Tak pokud to nekoho jeste zajima, tak staci udelat property Tabs (ve vyse uvedenem prikladu) jako readonly, tzn.: Public ReadOnly Property Tabs() As mZalozky Get Return _zalozky End Get End Property

Zpět na článek | Úvodní stránka Interval.cz