muszę napisać kontrolę użytkownika, który może być używany z następującą składnią:Jak zdefiniować właściwość na formancie użytkownika lub serwera ASP.NET, aby umożliwić wielu wartościom łańcuchów jako zagnieżdżone znaczniki o niestandardowej nazwie znacznika?
<quiz:Question runat="server">
<Answer>Foo</Answer>
<Answer>Bar</Answer>
</quiz:Question>
Próbowałem następujące oświadczenie nieruchomości:
[ParseChildren(true, "Answer")]
public class Question : UserControl
{
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string[] Answer { get; set; }
}
Ale wtedy edytor Visual Studio twierdzą, że <Answers >
powinny być samozamykanie się i otrzymuję ten wyjątek, jeśli zdecyduję inaczej:
Dosłowne treści ("Foo") nie są dozwolone w "System.String []".
czekałem na <asp:DropDownList>
odbłyśnikiem, która dziedziczy z ListControl
który deklaruje właściwość Items
następująco:
ParseChildren(true, "Items")
public abstract class ListControl
{
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public virtual ListItemCollection Items { get; }
}
To naprawdę nie jest takie samo jak to, co chcę, bo w DropDownList
należy dodać <asp:ListItem>
jako dzieci. I istnieje kilka rzeczy, których nie rozumiem o kontroli projektu, który obecnie pozwala mi znalezienie rozwiązania:
- Dlaczego nie tag
<asp:ListItem>
wymaga atrybutrunat="server"
? - Czy mogę zadeklarować taką "kontrolę"?
- Co jest takiego specjalnego w ListItemCollection, że przekłada się na tę szczególną składnię?
- Jaki kod mogę napisać, który zostanie przetłumaczony na składnię podaną w pierwszym przykładzie kodu powyżej?
czy trzeba używać UserControl lub można rozważyć użycie formantów niestandardowych (kontrole inhertied z WebControl)? – sos00
Zdecydowanie wolałbym kontrolę użytkownika, ponieważ znacznie łatwiej jest generować marżę za pomocą kontroli użytkownika. Czy ma to znaczenie pod względem realizacji? Powinien to być po prostu konstruktor parsera/kontrolera, prawda? –