2017-06-13 14 views
0

おやすみなさい。私はこのコンテンツフォームを持っていますが、データベースからの結果の数に応じて自動的に生成する方法はわかりません。私は入力して助けに感謝データベースに基づいてコンテンツを自動生成するにはどうすればよいですか?

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
     GetAllPosts(); 
     } 


    } 

    private void GetAllPosts() 
    { 
     var sql = "SELECT p.*, t.Id as TagId, t.Name as TagName, " + 
     "t.UrlFriendlyName as TagUrlFriendlyName, u.Username FROM Posts p " + 
     "LEFT JOIN PostsTagsMap m ON p.Id = m.PostId " + 
     "LEFT JOIN Tags t ON t.Id = m.TagId " + 
     "INNER JOIN Users u ON u.Id = p.AuthorId"; 

     SqlConnection SQLConn = new SqlConnection(con); 
     SqlCommand SQLComm = new SqlCommand(sql,SQLConn); 
     SqlDataAdapter SQLAd = new SqlDataAdapter(SQLComm); 
     DataTable dt = new DataTable(); 
     SQLAd.Fill(dt); 



     foreach (DataRow row in dt.Rows) 
     {       
       PageTitle.Text = "All Posts"; 
       PostName.Text = row["Title"].ToString(); 
       AuthorName.Text = row["Username"].ToString(); 
       PublishedDate.Text = Convert.ToDateTime(row["DatePublished"]).ToString(); 
       PostContent.Text = row["Content"].ToString(); 
       PostCategory.Text = "Events"; 
       PostTag.Text = row["TagName"].ToString();     
     } 



     } 

:私はここに私がそれを移入するつもりだ何ASP.Net

<asp:Content ID="Content1" ContentPlaceHolderID="AdminMain" runat="server"> 

<h1 class="container"><asp:Label runat="server" ID="PageTitle"></asp:Label></h1> 
<div class="container"> 
<hgroup class="title"> 
    <h1 class="post-title"> 
     <a href="/archive/post/@Model.Slug/"><asp:Label runat="server" ID="PostName"></asp:Label></a> 
    </h1> 
    <h6>Posted by <asp:Label runat="server" ID="AuthorName"></asp:Label> on <asp:Label runat="server" ID="PublushedDate"></asp:Label></h6> 


</hgroup> 
<div class="post-content"> 
    <asp:Label runat="server" ID="PostContent"></asp:Label> 
</div> 
<div class="post-tags"> 
    <h6>Categorized as:<a href="/archive/category/{CategoryUrlFriendlyName}/"><asp:Label runat="server" ID="PostCategory"></asp:Label></a><br /></h6> 
    <h6>Tagged as:<a href="/archive/tag/{TagUrlFriendlyName}/"><asp:Label runat="server" ID="PostTag"></asp:Label></a></h6> 


</div> 

にかなり新しいです。

+0

WebFormsの代わりにASP.NET MVCを使用することをお勧めします。これははるかに理解しやすくなります.WebFormsは効果的に非推奨になりました。 – Dai

+0

私はそれがあることを知っていますが、それは本当に自分の選択肢ではありません。 – SlicedBread

答えて

0

Webフォームはひどいです。

int i = 1; 

     PageTitle.Text = "All Posts"; 



      foreach (DataRow row in dt.Rows) 
     { 
      Label newlabel = new Label(); 
      PlaceHolder newplaceholder = new PlaceHolder(); 


      newlabel.ID ="PostName" + i.ToString() + "</a>"; 
      //html.Append(@"<hgroup class=""title"">"); 
      //html.Append(@"<h1 class=""post-title"">"); 
      PanelPosts.Controls.Add(newlabel); 
      newlabel.Text = @"<hgroup class=""title""><h1 class=""post-title""><a href=""#"">" + row["Title"].ToString() + "</a></h1>"; 

      newlabel = new Label(); 

      newlabel.ID = "AuthorName" + i.ToString(); 
      html.Append(@"<h6>"); 
      PanelPosts.Controls.Add(newlabel); 
      newlabel.Text ="Posted by: "+row["Username"].ToString()+" on "; 

      newlabel = new Label(); 

      newlabel.ID = "PublishedDate" + i.ToString(); 
      PanelPosts.Controls.Add(newlabel); 
      newlabel.Text = row["DatePublished"].ToString()+"</h6>"; 
      html.Append("</hgroup>"); 

      newlabel = new Label(); 

      newlabel.ID = "PostContent" + i.ToString(); 
      PanelPosts.Controls.Add(newlabel); 
      newlabel.Text = @"<div class=""post-content""><h3>" + row["Content"].ToString() + "</h3><br /></div>";    

      newlabel = new Label(); 

      newlabel.ID = "PostCategory" + i.ToString(); 
      PanelPosts.Controls.Add(newlabel); 
      newlabel.Text = @"<div class=""post-tags""><h6>Categorized as: <a href=""#"">" + "Category" + "</a> <br/> </h6>"; 


      newlabel = new Label(); 

      newlabel.ID = "PostTag" + i.ToString(); 
      PanelPosts.Controls.Add(newlabel); 
      newlabel.Text = @"<h6>Tagged as: <a href=""/archive/tag/{TagUrlFriendlyName}/"">"+row["TagName"].ToString()+"</div>"; 
      PanelPosts.Controls.Add(new LiteralControl("<br />"));   

      i++; 
     } 
+0

それをやってのよりWebFormsy方法は、サーバーコントロールに、このようなリピータ、リストビュー、またはGridViewのあなたのデータをバインドすることであっただろう - しかし、その後の進路あなたが生成されるマークアップを超えるほど多くのコントロールを持っていません。 – kman

関連する問題