C# Asp中继器控制

C# Asp中继器控制,c#,asp.net,repeater,C#,Asp.net,Repeater,我的中继器asp控件有问题 我的数据库中有一个名为course的表,其中列为CourseID、CourseName、CourseLink,另一个表名为module,其中列为ModuleID、ModuleName。还有另一个名为时间表的表,其中包含CourseID和ModuleID列 其工作方式是,当我点击HyperLink1,即下面带有相同课程id的段落,它会将段落的样式显示从隐藏更改为显示我使用JavaScript完成此功能,所以这不是问题所在 我想知道的是,如何列出与特定课程ID相关的模块名

我的中继器asp控件有问题

我的数据库中有一个名为course的表,其中列为CourseID、CourseName、CourseLink,另一个表名为module,其中列为ModuleID、ModuleName。还有另一个名为时间表的表,其中包含CourseID和ModuleID列

其工作方式是,当我点击HyperLink1,即下面带有相同课程id的段落,它会将段落的样式显示从隐藏更改为显示我使用JavaScript完成此功能,所以这不是问题所在

我想知道的是,如何列出与特定课程ID相关的模块名称

我在考虑在中继器内使用另一个中继器。然而,这只会使事情复杂化,成为一个诚实的人真的让我困惑

我怎样才能让它工作呢?不要使用sql,因为我可以轻松地创建select命令

下面是ASP.NET论坛的主题

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="DataSource1">
    <ItemTemplate>
        <p>
            <a id="HyperLink1" runat="server" href='<%# Eval("courselink") %>'>
                <%# Eval("CourseName") %>
            </a> <br />
        </p>

        <p id='<%# Eval("CourseID") %>' style="display:none">
            <%# Eval("ModulName") %>
        </p>
        <br />

    </ItemTemplate>
</asp:Repeater>

谢谢您的时间,我期待着找出我能做些什么来解决这个问题。

您几乎需要使用另一个中继器,如果我没记错的话,从2011年起我就没有使用过传统的ASP.NET Web表单的诀窍是,在父中继器的代码中钩住事件,然后使用事件参数获取与子表关联的id,获取数据,从中继器按id查找中继器我认为是发送器,但有一些方法可以找到它并绑定数据


我想指出的是,使用ASP.NET MVC更容易、更干净,通常不鼓励使用ASP.NET Web表单。

这种方式可能是最糟糕的

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="DataSource1">
<ItemTemplate>
    <p>
        <a id="HyperLink1" runat="server" href='<%# Eval("courselink") %>'>
            <%# Eval("CourseName") %>
        </a> <br />
    </p>

    <p id='<%# Eval("CourseID") %>' style="display:none">
       <%# moduleName(Eval("id").ToString()) %>
    </p>
    <br />

</ItemTemplate>

最好的解决方案是为您的演示文稿创建强类型模型,而不使用Eval,您将在您的Web表单中获得如下内容:

<asp:Repeater runat="server" DataSourceID="<%# Model %>">
    <ItemTemplate>
        <p>
           <a href="<%# ((Course)Container.DataItem).Link %>"><%# ((Course)Container.DataItem).Name %></a>  
        </p>

        <p id='<%# ((Course)Container.DataItem).ID %>' style="display:none">
            <asp:Repeater runat="server" DataSource="<%# ((Course)Container.DataItem).Modules %>">
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>
                    <ItemTemplate>
                        <li><%# ((Module)Container.DataItem).Name %></li>
                    </ItemTemplate>
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
        </p>
</ItemTemplate>

我建议使用强类型模型,在代码中获取这些模型,并将其绑定到中继器。然后使用嵌套的中继器。嗨@mason,我一开始试过了,但是我总是在从中继器中获取ID时遇到问题,通过嵌套中继器,它会变得更加复杂,这就是为什么我尝试寻找其他选项,但似乎这是唯一的方法。我能请你进一步解释一下吗。谢谢你之前已经讨论过了。谢谢你肯尼思,这正是我要找的。不过,我不知道该在待办事项中放些什么,如果您能进一步解释,是否可能?嗨,凯姆,谢谢您的回答。但是,我想从时间表中提取模块ID,其中课程ID与web表单上的段落ID相同。我的选择字符串类似于以下数据源1.SelectCommand=从模块中选择模块名,课程名,课程名,课程名,课程名,课程表,其中COURSE.COURSEID=timeline.COURSEID和MODULE.MODULEID=timeline.MODULEID和COURSE.COURSEID=+COURSEID。。最后的课程ID是我想调用的,让它在TimeTable上显示所有模块ID和该课程ID Hi Jason,谢谢你的回复。如果可能的话,请举例说明这一点。非常感谢。
<asp:Repeater runat="server" DataSourceID="<%# Model %>">
    <ItemTemplate>
        <p>
           <a href="<%# ((Course)Container.DataItem).Link %>"><%# ((Course)Container.DataItem).Name %></a>  
        </p>

        <p id='<%# ((Course)Container.DataItem).ID %>' style="display:none">
            <asp:Repeater runat="server" DataSource="<%# ((Course)Container.DataItem).Modules %>">
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>
                    <ItemTemplate>
                        <li><%# ((Module)Container.DataItem).Name %></li>
                    </ItemTemplate>
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
        </p>
</ItemTemplate>
public List<Course> Model
{
    get
    {
        List<Course> courses = new List<Course>();
        // Some example data, in your situation you should instantiate the classes based on the data from the database.
        Course exampleCourse = new Course();
        exampleCourse.ID = 1;
        exampleCourse.Name = "Example course";

        // Create example module 1
        Module exampleModule1 = new Module();
        exampleModule1.ID = 10;
        exampleModule1.Name = "Example Module 1";

        // Create example module 2
        Module exampleModule2 = new Module();
        exampleModule2.ID = 11;
        exampleModule2.Name = "Example Module 2";

        // add modules to the course
        exampleCourse.Modules.Add(exampleModule1);
        exampleCourse.Modules.Add(exampleModule2);

        // add course to the courses
        courses.Add(exampleCourse);
        return courses;
    }
}
public class Course
{
    public int ID { get; set; }
    public string Link { get; set; }
    public string Name { get; set; }
    public List<Module> Modules { get; set; }
    public Course()
    {
        this.Modules = new List<Module>();
    }
}

public class Module
{
    public int ID { get; set; }
    public string Name { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
    this.DataBind();  
}