【问题标题】:Show HTML for each database object显示每个数据库对象的 HTML
【发布时间】:2015-12-17 16:22:53
【问题描述】:

我有一个学校项目,它看起来像 Facebook。当用户登录时,它将从数据库中收到许多帖子。我正在使用 ASP.NET WebForms。

但是我怎样才能为数据库中的每个帖子创建 HTML 代码呢?

这是一篇文章的 HTML 代码:

<article class="post">
    <header>
        <div class="title">
            <h2><a href="#">Post Title</a></h2>
        </div>
        <div class="meta">
            <time class="published" datetime="2015-11-01">November 1, 2015</time>
            <a href="profile.html" class="author"><span class="name">Jane Doe</span><img src="images/avatar.jpg" alt="" /></a>
        </div>
    </header>
    <a href="#" class="image featured"><img src="images/pic01.jpg" alt="" /></a>
    <p>Post text</p>
    <footer>
        <ul class="actions">
            <li><a href="#" class="button big">View Comments</a></li>
        </ul>
        <ul class="stats">
            <li><a href="#" class="icon fa-heart">28</a></li>
            <li><a href="#" class="icon fa-comment">128</a></li>
        </ul>
    </footer>
</article>

我真的不知道如何为每个数据库对象制作这个 HTML 博客。

数据库中的数据不多,所以现在一次加载所有帖子没有问题。

【问题讨论】:

  • 在您的页面上放置一个Repeater控件,并使用正确的ItemTemplate。将 Repeater 控件绑定到帖子列表。检查此答案并根据您的需要进行更改:stackoverflow.com/a/33694399/2946329
  • 是的,asp.net 网络表单。
  • 嗯,从根本上说,您需要某种循环。
  • 您是否已经有了从数据库中加载文章的代码?您是检索 DataTable,还是检索 Model 对象?显示该代码可能会很好。
  • 我先写了visual c#的代码,现在我必须把它翻译成asp.net,所以我之前使用的代码不再正确了。但是数据库将所有内容都作为字符串返回,然后我创建了一个字符串数组,因此每个字符串数组都包含我在单个帖子中需要的所有内容。然后我为所有字符串数组创建一个列表。

标签: c# html asp.net webforms


【解决方案1】:

我会制作像这样的简单数据库表:

帖子表格

PostID     - int (primary key)
Title      - nvarchar
Status     - varchar (Published, Pending, etc.)
PostDate   - datetime
UserID     - int (foreign key)
Image      - varchar (save the file name / file path + file name)
Post       - nvarchar
Likes      - int (count total)
Comments   - int (count total)

用户

UserID     - int (primary key)
FirstName  - nvarchar
LastName   - varchar
Image      - varchar (save the file name / file path + file name)

然后在 .aspx 中,我将使用 Repeater 或 ListView ASP.NET 控件并在其中放置 HTML 标记:

<asp:ListView id="lvPosts" runat="server">
    <ItemTemplate>
        <article class="post">
            <header>
                <div class="title">
                    <h2><a href='details.aspx?ID=<%# Eval("PostID) %>'><%# Eval("Title") %></a></h2>
                </div>
                <div class="meta">
                    <time class="published" datetime='<%# Eval("PostDate", "{0: yyyy-MM-dd}") %>'><%# Eval("PostDate", "{0: MMMM dd, yyyy}") %></time>
            <a href="profile.aspx?ID=<%# Eval("UserID") %>' class="author"><span class="name"><%# Eval("Username") %></span><img src='images/<%# Eval("UserImage") %>' alt="" /></a>
                </div>
            </header>
            <a href='post.aspx?ID=<%# Eval("PostID") %>' class="image featured"><img src='images/<%# Eval("PostImage") %>' alt="" /></a>
            <p><%# Eval("Post")</p>
            <footer>
                <ul class="actions">
                    <li><a href="#" class="button big">View Comments</a></li>
                </ul>
                <ul class="stats">
                    <li><a href="#" class="icon fa-heart"><%# Eval("Likes")</a></li>
                    <li><a href="#" class="icon fa-comment"><%# Eval("Comments")</a></li>
                </ul>
            </footer>
        </article>
    </ItemTemplate>
</asp:ListView>

在代码隐藏中,我将创建一个允许设置 ASP.NET 控件的数据源值的方法。

我还可以包含一个简单的 SQL 语句来显示 Eval() 方法所需的每个数据:

SELECT p.PostID, p.Title, p.PostDate, p.UserID,
u.FirstName + ' ' + u.LastName as Username, 
p.Image as PostImage, u.Image as UserImage,
p.Post, p.Likes, p.Comments FROM Posts p
JOIN Users u ON u.UserID = p.PostID
// include WHERE keyword if conditions are needed

您可能还需要使用 CSS 来分隔每个帖子。要显示的项目数将基于您的查询。

希望这些有所帮助。我没有费心检查 IDE 的语法。编码愉快!

【讨论】:

  • 好帖子,但我建议您使用强类型模型,这样您就可以避免使用“魔术字符串”和 Eval 语句。见Using ItemType for strongly typed repeater control?
  • @mason - 前提是 OP 使用 ASP.NET 4.5 或更高版本 :)
  • @RahulSingh 好点。虽然 .NET 4 支持下个月结束,但我认为这包括对 ASP.NET 4 的支持。
猜你喜欢
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多