我推荐你学习about and how使用旨在用于以下情况的数据控件多行 can被返回并且数据是repeated in the 相同格式,就像你现在的(评论)。
控件示例:
GridView
ListView
Repeater
此处详细介绍每个控件并不能回答您的问题,但很重要;无论如何,您可以轻松地在线研究它。
对于这种情况,我建议您使用 ListView:
- Add a
ListView
到您的页面 - 您希望评论框位于的位置
- Use an
ItemTemplate
tag inside the ListView
布局每个单独的评论将遵循的格式(这样你就可以将一个段落<p>
评论周围的标签。在要绑定列的情况下(例如实际注释),您可以使用以下代码:
<%# Eval("ColumnName") %>
只是为了清楚起见,上面的代码在服务器上运行,因为它是一个内联服务器标签:由服务器运行的 .aspx 文件中的代码。该代码由标签开头和结尾的百分比符号表示<% %>
,VS (Visual Studio) 以黄色突出显示。内联服务器标签有不同类型,如第一个符号所示。在这种情况下,哈希#
使用,这意味着标签中的代码是结合表达。对于上面提到的所有数据控件来说,您将使用此符号将数据与内联服务器标记绑定。
例如(在您的ItemTemplate
, 尽管):
<asp:ListView ID="LV_Comments" runat="server">
<ItemTemplate>
<b><%# Eval("Username") %></b>
<br />
<i><%# Eval("WhenPosted") %></i>
<p><%# Eval("Comment") %></p>
</ItemTemplate>
</asp:ListView>
- 现在你只需要设置它的
DataSource
使用 L2S (LINQ to SQL) 到您的 Comments 表。我建议你创建一个method执行此操作并调用该方法Page_Load
event。并在添加新注释后调用该方法,因为默认情况下只有在没有回发的情况下才会绑定数据(见下文)。
设置数据源示例:
using (var db = new DataContext())
{
LV_Comments.DataSource = from x in db.DT_Comments select new {
Username = x.Name,
x.Comment,
WhenPosted = x.PostTime
};
LV_Comments.DataBind();
}
您将需要更改列的名称和DataContext
明显地。注意我声明的地方SomeName = x.ColumnName
,我只是更改我在中引用的列名称ListView
(这段代码:<%# Eval("SomeName") %>
);你不必这样做,就像你在评论栏中看到的那样。
如何将此代码与method和你的events:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
ListViewMethod();
}
private void ListViewMethod()
{
// ListView data binding code here
}
protected void NewCommentButton_Click(object sender, EventArgs e)
{
// Your code to add new comment
ListViewMethod();
}
请记住详细了解何时以及如何使用这些数据控件的更多功能。就像如果您没有评论一样,您可能想告诉用户这一点。所以你会使用EmptyItemTemplate
在你的里面ListView
标签(但在 ItemTemplate 之外),如下所示:
<EmptyItemTemplate>
<i>No comments have been posted</i>
</EmptyItemTemplate>