在某些情况下在字符串中添加换行符

本文关键字:添加 换行符 情况下 字符串 | 更新日期: 2023-09-27 18:09:13

我有一个老Sitefinity网站,我正在工作,在某些产品页面上有一个可供选择的切割玻璃选项。这些被列为缩略图图像,可以点击并打开到一个弹出窗口。现在,代码被设置为创建包含缩略图部分和缩略图本身的div,并且它们作为连续字符串一个接一个地显示。当缩略图达到所在区域的宽度时,它们会下拉到下一行。现在的问题是,有三个剪切类缩略图需要组合在一起,即使这意味着将它们移动到下一行。

我不知道该怎么做,因为我不想做不必要的工作。此外,这不是我创建的代码——这是我必须编辑的其他人的代码(这个人不能回答问题)。

下面是设置包含缩略图的div的代码位(GlassItem是包含每个切割的玻璃缩略图的div的名称):

protected String BuildCutGlass(Guid CurrentPage)
    {
        StringBuilder Glass = new StringBuilder();
        using (MySqlConnection cn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Sitefinity"].ToString()))
        {
            cn.Open();
            MySqlCommand cmd = new MySqlCommand("SELECT id, BrandID, GlassName, Thumbnail, LargeImage, Ordinal, (SELECT Window_Brands.BrandName FROM Window_Brands WHERE Window_Brands.BrandPage = BrandID) AS BrandName FROM Window_Brand_cutglass WHERE BrandID = ?PageID AND Thumbnail IS NOT NULL AND LargeImage IS NOT NULL ORDER BY Ordinal", cn);
            cmd.Parameters.Add(new MySqlParameter("PageID", CurrentPage.ToString()));
            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (reader["Thumbnail"].ToString().Length > 1 && reader["LargeImage"].ToString().Length > 1)
                        Glass.Append(String.Format("<div class='GlassItem'><a href='{0}' class='CutGlassPopup Icon'><img src='{1}' alt='{2}' width='77' height='77' /></a><a href='{0}' class='CutGlassPopup'>{2}</a></div>", Revere.GetImagePath(reader["LargeImage"].ToString()), Revere.GetImagePath(reader["Thumbnail"].ToString()), reader["GlassName"].ToString()));
                }
            }
            cn.Close();
        }
        return Glass.ToString();
    } 

在某些情况下在字符串中添加换行符

这可能不是您正在寻找的快速修复方法,但是这段代码难以使用的原因是因为您的数据检索代码与html生成代码混合在一起。我将为GlassItem创建一个类,并修改方法以返回它们的列表。

public class GlassItem
{
    public string LargeImagePath {get;set;}
    public string ThumbnailPath {get;set;}
    public string GlassName {get;set;}
}
protected List<GlassItem> GetGlassItems(Guid CurrentPage)
{
    var items = new List<GlassItem>();
   using (MySqlConnection cn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Sitefinity"].ToString()))
   {
       cn.Open();
       MySqlCommand cmd = new MySqlCommand("SELECT id, BrandID, GlassName, Thumbnail, LargeImage, Ordinal, (SELECT Window_Brands.BrandName FROM Window_Brands WHERE Window_Brands.BrandPage = BrandID) AS BrandName FROM Window_Brand_cutglass WHERE BrandID = ?PageID AND Thumbnail IS NOT NULL AND LargeImage IS NOT NULL ORDER BY Ordinal", cn);
       cmd.Parameters.Add(new MySqlParameter("PageID", CurrentPage.ToString()));
       using (MySqlDataReader reader = cmd.ExecuteReader())
       {
           while (reader.Read())
           {
               if (reader["Thumbnail"].ToString().Length > 1 && reader["LargeImage"].ToString().Length > 1)
                {
                    items.Add(new GlassItem 
                            { 
                                LargeImagePath = Revere.GetImagePath(reader["LargeImage"].ToString()), 
                                ThumbnailPath = Revere.GetImagePath(reader["Thumbnail"].ToString()), 
                                GlassName = reader["GlassName"].ToString()
                            });
                }   
           }
       }
       cn.Close();
   }
    return items;
}

然后你可以使用linq等来找出每行你想要的项目,或者你也可以使用一个简单的循环。

    var items = GetGlassItems(new Guid("..."));
    StringBuilder Glass = new StringBuilder();
    for(int i = 0; i < items.Count();i++)
    {
        Glass.Append(String.Format("<div class='GlassItem'><a href='{0}' class='CutGlassPopup Icon'><img src='{1}' alt='{2}' width='77' height='77' /></a><a href='{0}' class='CutGlassPopup'>{2}</a></div>", 
                                    items[i].LargeImagePath, 
                                    items[i].Thumbnail, 
                                    items[i].GlassName));
        if(i % 5 == 0 )
        {   
            // new line every 5 items
            Glass.AppendLine();
        }
    }