2011-03-24 28 views
1

爲什麼圖像不能附加到asp中的div?字符串與ASP.NET WebForms中的控件

divHtml.append(img); 

爲什麼我必須使用div.controls.add(img);

和爲什麼不能我添加一個字符串Controls.Add被這樣說

div.controls.add(img + String.Format("{0}", reader.GetString(0)); 

? Orginally「一開始」

我有這個代碼:

cn.Open(); 
    using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + theUserId + " ORDER BY idWallPosting DESC", cn)) 

    using (OdbcDataReader reader = cmd.ExecuteReader()) 
    { 
     var divHtml = new System.Text.StringBuilder(); 
     while (reader.Read()) 
     { 
      divHtml.Append("<div id=test>"); 
      divHtml.Append(String.Format("{0}", reader.GetString(0))); 
      divHtml.Append("</div>"); 
     } 


     test1.InnerHtml = divHtml.ToString(); 

    } 
} 

}

這給了我這一點放(注意的CSS應用於所有間距等都是不錯的整潔:

enter image description here

然後我做了這個代碼:

  while (reader.Read()) 
      { 
       System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
       //div.ID = "test"; 
       div.Style["float"] = "left"; 
       Image img = new Image(); 
       img.ImageUrl = "~/userdata/2/uploadedimage/batman-for-facebook.jpg"; 
       img.AlternateText = "Test image"; 
       div.Controls.Add(img); 
       test1.Controls.Add(div); 

       System.Web.UI.HtmlControls.HtmlGenericControl div1 = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
       //div1.ID = "test"; 
       div1.InnerText = String.Format("{0}", reader.GetString(0)); 

       div1.Style["float"] = "left"; 
       test1.Controls.Add(div1); 

       System.Web.UI.HtmlControls.HtmlGenericControl div2 = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
       //div2.ID = "test"; 
       div2.Style["clear"] = "both"; 
       test1.Controls.Add(div2); 
      } 
     } 
    } 
} 

}

這是我的結果是好的,但如果你注意到細心有評論的div是我的CSS的領域之外我tryed應用註釋掉線,看它是否每個之間沒有CSS會工作,但它只是高尚的時髦tbh。 Specialy當你螢火看看:

enter image description here 這是會發生什麼,如果我嘗試使用方法如下所述分析控制:

cn.Open(); 
    using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + userId + " ORDER BY idWallPosting DESC", cn)) 
    { 
     using (OdbcDataReader reader = cmd.ExecuteReader()) 
     { 
      test1.Controls.Clear(); 

      while (reader.Read()) 
      { 
       System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 

       div.ID = "test"; 
       div.Style["float"] = "left"; 
       Image img = new Image(); 
       img.ImageUrl = "~/userdata/2/uploadedimage/batman-for-facebook.jpg"; 
       img.AlternateText = "Test image"; 

       div.Controls.Add(img); 
       div.Controls.Add(ParseControl(String.Format("{0}", reader.GetString(0))); 

       test1.Controls.Add(div); 

enter image description here

編輯:

 using (OdbcDataReader reader = cmd.ExecuteReader()) 
     { 
      test1.Controls.Clear(); 

      while (reader.Read()) 
      { 
     System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
     div.Attributes["class"] = "test"; 
     div.Style["float"] = "left"; 

     div.ID = "test"; 
     //div.Style["float"] = "left"; 
     Image img = new Image(); 
     img.ImageUrl = "~/userdata/2/uploadedimage/batman-for-facebook.jpg"; 
     img.AlternateText = "Test image"; 

     div.Controls.Add(img); 
     div.Controls.Add(ParseControl(String.Format("{0}", reader.GetString(0)))); 

     test1.Controls.Add(div); 

Shadow設法讓這個工作,我也用其他評論的解析。

但現在的問題與test1的仍然DIV不與測試div的擴大:

enter image description here

 <asp:Button ID="Button1" runat="server" Text="Post Message" Width="98px" 
      onclick="Button1_Click" /> 
     </p> 
    <p> 
    </p> 
     <div id="test1" runat="server" /> 
//could be this line 
    </asp:Content> 

或者它可能是

test1.Controls.Add(div); 

在我的代碼那不是被拾起或正確的括號可能? CSS:

div#test1 
{ 

} 
div .test 
{ 
    width:90%; 
    z-index:1; 
    padding:27.5px; 
    border-top: thin solid #736F6E; 
    border-bottom: thin solid #736F6E; 
    color:#ffffff; 
    margin:0 auto; 
    white-space: pre; 
    white-space: pre-wrap; 
    white-space: pre-line; 
    word-wrap: break-word; 
} 
+0

有沒有解決的辦法? – 2011-03-24 13:29:28

回答

1

您要添加圖像加上從數據庫來文字文本。

正確的方法確實添加控件 - Image控制您已經有和文本使用Literal服務器控件:

div.Controls.Add(img); 
div.Controls.Add(new LiteralControl(reader.GetString(0))); 

編輯:如果你堅持讓圖像控件的HTML字符串爲您自身的原因,有可能使用這樣的代碼:

StringBuilder html = new StringBuilder(); 
using (StringWriter stringWriter = new StringWriter(html)) 
{ 
    using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter)) 
    { 
     image.RenderControl(textWriter); 
    } 
} 

這將圖像呈現到html變量,那麼你可以指定字符串值其他一些騙子的Text像你最初那樣的操控。例如:

myLabel.Text = html.ToString(); 

編輯II:應用CSS來你添加控件,首先更改CSS本身這一點:div#test此相反:div .test

這一行現在添加到您的代碼:

System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
div.Attributes["class"] = "test"; 
div.Style["float"] = "left"; 
... 

這將適用類各頂級div,這可以用於應用適當的CSS。

+0

'Literal'只有一個默認的構造函數。 – Steven 2011-03-24 13:53:18

+1

@Steven謝謝,現在要解決這個問題。意思'LiteralControl'。 – 2011-03-24 13:55:06

+0

好吧保持陰影即時重新編輯從一開始嘗試向大家解釋什麼發生了什麼,你自己也許它可能有助於調試 – 2011-03-24 14:01:53

4

imgSystem.Web.UI.Control類型,它是由接受Controls.Add的類型。特別是,System.Web.UI.ControlSystem.String不一樣。

由於C#是一個強類型語言中,一種方法接受System.Web.UI.Control(如AddSystem.Web.UI.ControlCollection)不能接受System.String作爲參數。

類似地,假定divHtmlSystem.StringBuilder,對System.StringBuilder了結型System.Web.UI.Control沒有Append方法,因此試圖通過img現有Append方法將失敗。

(您也可以遇到麻煩你的代碼,因爲你不使用你的方法和屬性的正確名稱進行編譯;它是ControlscontrolsAddadd,並且Appendappend

+0

對不起domenic我manualy鍵入(懶惰在我的部分) – 2011-03-24 13:48:56

1

因爲控件不僅僅是字符串。它們是實際呈現時變成html字符串的對象。在asp.net webforms中閱讀控件和頁面生命週期。

1

你可以字符串添加到控制,你將不得不使用ParseControl(),這將字符串轉換控制,或作爲對照

div.controls.add(ParseControl(String.Format("{0}", reader.GetString(0))); 
+0

這對字符串文本做什麼? – 2011-03-24 13:47:50

+0

它只是將其作爲字符串轉儲到控件中,而不進行任何更改。 – AliHA 2011-03-24 14:04:26

+0

耶在編輯,這工作它確實是什麼即時消息後,但由於某種原因,我放鬆了對頁面的所有控制權,圖像是左邊像我需要和文本直接歸因於圖像一切都很好,但由於某種原因,css出現故障。 – 2011-03-24 14:14:09

2

如果你真的想這樣,你總是可以創建此擴展方法:

public static class ControlExtensions 
{ 
    public static void Add(this WebControl control, string html) 
    { 
     control.Controls.Add(new Literal 
     { 
      Text = html, Mode = LiteralMode.PassThrough 
     }); 
    } 
} 

現在你可以這樣做:

div.Controls.Add(String.Format("{0}", reader.GetString(0))); 
相關問題