Я обнаружил, что у меня есть элемент управления повторителем, который привязан к XML-документу. Мой клиент теперь запрашивает, чтобы текстовое поле, которое является повторителем, могло быть либо текстовым полем, либо флажком.
Кажется, я не могу найти простой способ сделать следующее:
if ((System.Xml.XmlNode)e.Item.DataItem.Attributes["type"] == "text")
<asp:TextBox runat = "server" ID = "txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass = "std"></asp:TextBox>
else
<asp:CheckBox runat = "server" ID = "txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass = "std"></asp:TextBox>
Есть ли хороший способ расширить мою текущую реализацию без необходимости переписывать логику. Если бы я мог ввести элемент управления через «OnItemDataBound», это тоже было бы хорошо. Но я не могу заставить его работать





Как насчет чего-то похожего в вашей разметке в каждом элементе управления текстовым полем и флажком?
Visible=<%= Eval("type").tostring() == "text") %>
В репитере перетащите Panel, затем создайте обработчик событий для события привязки данных репитера, программно создайте TextBox или CheckBox и добавьте его в качестве дочернего элемента управления Panel. У вас должна быть возможность получить DataItem из аргументов события, чтобы получить такую информацию, как ваш атрибут "type" или значения, для подачи ваших свойств Text или информации css и т. д.
Я бы согласился с предложением mspmsp. Вот быстрый и грязный код в качестве примера:
Поместите это в свой aspx:
<asp:Repeater ID = "myRepeater" runat = "server" OnItemCreated = "myRepeater_ItemCreated">
<ItemTemplate>
<asp:PlaceHolder ID = "myPlaceHolder1" runat = "server"></asp:PlaceHolder>
<br />
</ItemTemplate>
</asp:Repeater>
И это в вашем коде:
dim plh as placeholder
dim uc as usercontrol
protected sub myRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
if TypeOf e Is ListItemType.Item Or TypeOf e Is ListItemType.AlternatingItem Then
plh = ctype(e.item.findcontrol("myPlaceHolder1"), Placeholder)
uc = Page.LoadControl("~/usercontrols/myUserControl.ascx")
plh.controls.add(uc)
end if
end sub