На веб-сайте C# Webforms (не веб-приложении) у меня есть следующие настройки:
Страница, которая включает Step.ascx, который включает asp:Repeater
.
Повторитель в Step.ascx отображает все разделы (Section.ascx
) на этом шаге.
SectionInfoProvider.GetSections(1).ToList()
возвращает список SectionInfo
, который является классом нескольких свойств, включая DisplayName
в виде строки.
Я получаю сообщение об ошибке компиляции (не удалось найти тип или имя пространства имен) при попытке динамически установить свойство SectionInfo
пользовательского элемента управления Section
в репитер в Step.ascx.cs. Я пробовал использовать частичное имя класса пользовательского элемента управления и UserControl
, но ни одно из них не работает.
Я также пытаюсь создать коллекцию SectionControls
, потому что я хочу использовать это для чего-то еще на странице.
Что я здесь делаю не так?
Step.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="~/Step.ascx.cs" Inherits="Custom_Step" %>
<%@ Register TagPrefix="uc" TagName="Section" Src="~/Section.ascx" %>
<asp:Repeater runat="server" ID="rptSections" OnItemDataBound="rptSections_OnItemDataBound" EnableViewState="True">
<ItemTemplate>
<uc:Section runat="server" ID="Section" EnableViewState="True"/>
</ItemTemplate>
</asp:Repeater>
Step.ascx.cs
public partial class Custom_Step : System.Web.UI.UserControl
{
public IEnumerable<SectionInfo> Sections { get; set; }
private IEnumerable<???> SectionControls { get; set; } <-- What should ??? be?
protected override void OnLoad(EventArgs e)
{
Sections = SectionInfoProvider.GetSections(1).ToList();
rptSections.DataSource = Sections;
rptSections.DataBind();
}
protected void rptSections_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
var info = (SectionInfo)e.Item.DataItem;
var ctrl = (???)e.Item.FindControl("Section"); <-- What should ??? be?
ctrl.SectionInfo = info;
if (SectionControls == null) SectionControls = new List<???>(); <-- What should ??? be?
((List<???>)SectionControls).Add(ctrl); <-- What should ??? be?
}
}
Section.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="~/Section.ascx.cs" Inherits="Custom_Section " %>
<h3><asp:Literal runat="server" ID="litSectionHeading" /></h3>
Section.ascx.cs:
public partial class Custom_Section : System.Web.UI.UserControl
{
public SectionInfo SectionInfo { get; set; }
protected override void OnLoad(EventArgs e)
{
litSectionHeading.Text = SectionInfo.DisplayName;
}
}