2011-03-24 61 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))); 
相关问题