C# Asp中继器控制
我的中继器asp控件有问题 我的数据库中有一个名为course的表,其中列为CourseID、CourseName、CourseLink,另一个表名为module,其中列为ModuleID、ModuleName。还有另一个名为时间表的表,其中包含CourseID和ModuleID列 其工作方式是,当我点击HyperLink1,即下面带有相同课程id的段落,它会将段落的样式显示从隐藏更改为显示我使用JavaScript完成此功能,所以这不是问题所在 我想知道的是,如何列出与特定课程ID相关的模块名称 我在考虑在中继器内使用另一个中继器。然而,这只会使事情复杂化,成为一个诚实的人真的让我困惑 我怎样才能让它工作呢?不要使用sql,因为我可以轻松地创建select命令 下面是ASP.NET论坛的主题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: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();
}