0

我正在为我的网页制作一个评论框,我设计了表单来获取用户名和评论并将其存储在数据库表中。我不知道如何在页面上呈现该数据。通过在表格上迭代并随后在页面上创建段落或通过在页面上创建标签。

我在 C# 中使用 LINQ to SQL。请告诉我如何在网页上的数据库中呈现评论或一些教程链接

4

3 回答 3

2

我建议您了解以及如何使用数据控件,这些控件旨在用于可以返回多行 并且数据以相同格式重复的情况,例如您现在的格式(评论)。示例控件:

  • GridView
  • ListView
  • Repeater

在这里详细介绍每个控件不会回答您的问题,但很重要;无论如何,您都可以在网上轻松研究它。

对于这种情况,我建议您使用 ListView:

  • 添加ListView到您的页面 - 您希望评论框所在的位置
  • 使用内部ItemTemplate标签来布局每个单独的评论将遵循的格式(所以你会在评论周围加上段落标签。列绑定的地方(例如实际评论),你使用代码: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 表。我建议您创建一个方法来执行此操作并在Page_Load 事件上调用该方法。并在添加新评论后调用该方法,因为默认情况下只有在没有回发的情况下才会绑定数据(见下文)。

设置数据源示例:

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") %>;你不必这样做,就像你可以看到我没有评论列一样。

如何将此代码与方法事件一起使用:

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>
于 2013-03-03T10:50:39.057 回答
1

使用 HtmlGenericControl 你可以做到这一点。请参阅下面的示例

using System.Web.UI.HtmlControls;// add this namespace


HtmlGenericControl MyPtag = new HtmlGenericControl("p");
MyPtag.InnerText = "Your content inside P Tag";
Placeholder1.Controls.Add(MyPtag);

您必须将其添加到如上所示的占位符,Placeholder1。

于 2013-03-03T07:29:33.500 回答
1

假设您有一个CommentsTable列:

  • 标识整数
  • 用户名 varchar(50)
  • 评论 nvarchar(5000)
  • 日期创建日期时间

并且您的 LinqToSql 数据上下文是 myDataContext ,您可以这样做:

myDataContext db = new myDataContext();
var commentsData = db.CommentsTable.ToList();

string html=string.Empty;
foreach(var item in commentsData)
{
   html+="<div class='property-row'><div class='username'>"+item.Username+"</div>";
   html+="<div class='notice'>"+item.DateCreated.ToString("mm-dd-yyyy hh:mm")+"</div>"
   html+="<div class='comment'>"+item.Comment+"</div>";
}

Div1.InnerHtml= html;

现在您可以通过适当地装饰设计器上的类来控制您的部分的外观,即用户名行及其下方的评论,即

.property-row
{
    position:relative;
    width:100%;
    background-color:#CCCCCC;
    border:1px solid Black;
}
.username
{
   position:relative:
   padding:2px;
   top:2px;
   font-size:0.8em;
   color:#333333;
   text-decoration:underline;
}
.comment
{
   position:relative;
   padding:2px;
   margin:2px;
   font-size:1em;
   color:black;
}
.notice
{
   font-size:0.7em;
}
于 2013-03-03T07:40:05.403 回答