在asp.net中为评论系统动态添加<p>标签</p>

时间:2013-03-03 06:13:06

标签: asp.net linq-to-sql

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

我在C#中使用LINQ to SQL。 请告诉我如何在网页上的数据库中呈现注释或者链接到教程

3 个答案:

答案 0 :(得分: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)将其Page_Load设置为您的Comments表。我建议您创建一个方法来执行此操作,并在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(); } 事件上调用该方法。并在添加新注释后调用该方法,因为如果默认情况下没有回发,则只绑定数据(见下文)。

设置DataSource示例:

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

请记住了解有关何时以及如何使用这些datacontrol的更多功能的更多信息。就像你没有评论一样,你可能想告诉用户这个。因此,您可以在ListView标记内使用<EmptyItemTemplate> <i>No comments have been posted</i> </EmptyItemTemplate> (但在ItemTemplate之外),如下所示:

{{1}}

答案 1 :(得分:1)

我们假设您有CommentsTable列:

  • Id int
  • 用户名varchar(50)
  • 评论nvarchar(5000)
  • DateCreated DateTime

你的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;
}

答案 2 :(得分:0)

使用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。