c# - ASP.NET WebForms 中的字符串与控件

标签 c# asp.net html webforms

为什么不能在 asp 中将图像附加到 div 中?

divHtml.append(img);

为什么我必须使用 div.controls.add(img);

为什么我不能向 controls.add 添加一个字符串,像这样说

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

? 最初是“一开始”

我有这段代码:

    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);
            }
        }
    }
}

这是我的结果,没问题,但如果你仔细注意到每个评论之间没有 css,div 在我的 css 范围之外,我尝试应用注释掉的行,看看它是否有效,但它有点时髦tbh。特别是当你在 Firebug 中看它时:

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

最佳答案

img 属于 System.Web.UI.Control 类型,这是 Controls.Add 接受的类型。特别是,System.Web.UI.ControlSystem.String 不同。

由于 C# 是一种强类型语言,因此接受 System.Web.UI.Control 的方法(如 System.Web.UI.ControlCollection 上的 Add ) 不能接受 System.String 作为参数。

同样,假设divHtml 是一个System.StringBuilderSystem.StringBuilder 上没有Append 方法采用 System.Web.UI.Control 类型,因此尝试将 img 传递给现有的 Append 方法将失败。

(您可能还无法编译代码,因为您没有为方法和属性使用正确的名称;它是 Controls 而不是 controlsAdd 不是 addAppend 不是 append。)

关于c# - ASP.NET WebForms 中的字符串与控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419939/

相关文章:

html - 这个按字母顺序排列的 css 选择器是什么意思?

c# - C#中的Process.Start()对非管理员用户不起作用

c# - 忽略 Controller 参数缺失引起的异常

c# - string[] 或 List<string> 的 DataAnnotations MaxLength 和 StringLength?

asp.net - 如何让这个 ASP.NET 路由正常工作?

html - 文本溢出 : ellipsis doesn't work after line break in Internet Explorer

c# - 使用 Xamarin Android 创建 PDF

asp.net - 获取 Blazor Server 中的当前 Windows 用户

c# - 无法将asp.net页面连接到MySQL数据库

html - 图像样式效果