代码之家  ›  专栏  ›  技术社区  ›  SearchForKnowledge

如何在保存到SQL数据库并检索以显示在标签内时保留换行符

  •  4
  • SearchForKnowledge  · 技术社区  · 11 年前

    我有一个文本区域,通过按enter,可以在多行中输入一些文本:

    <asp:TextBox ID="tbMessage" runat="server" ClientIDMode="Static" 
         TextMode="MultiLine" Columns="30" Rows="5"></asp:TextBox>
    

    我从代码隐藏保存文本( MessageText 列的类型为 varchar ):

    using (SqlCommand qSave = new SqlCommand())
    {
        qSave.Connection = oCon;
        qSave.CommandType = CommandType.Text;
        qSave.CommandText = @"INSERT INTO [Db1].[dbo].[Table1] (MessageText) VALUES (@MessageText)";
        qSave.Parameters.AddWithValue("@MessageText", tbMessage.Text);
    
        try
        {
            oCon.Open();
            qSave.ExecuteNonQuery();
        }
        catch (SqlException ce)
        {
        }
        finally
        {
            oCon.Close();
        }
    }
    

    我检索列并将其显示在代码后面的标签中:

    public void MyFunction()
    {
        strSql = @"SELECT * FROM [Db1].[dbo].[Table1]";
    
        using (SqlConnection conn = new SqlConnection(gloString))
        {
            try
            {
                // create data adapter
                SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
                // this will query your database and return the result to your datatable
    
                myDataSet = new DataSet();
                da.Fill(myDataSet);
    
                string specific = "";
                string generic = "";
                string strTemp = "";
    
                foreach (DataRow r in myDataSet.Tables[0].Rows)
                {
                    if (r["MessageText"].ToString().Length <= 65)
                    {
                        strTemp = r["MessageText"].ToString();
                    }
                    else
                    {
                        strTemp = TruncateLongString(r["MessageText"].ToString(), 65) + "...";
                    }
    
                    specific += "<span class='hoverText tooltip' title='" + this.Server.HtmlEncode(r["MessageText"].ToString().Replace("\r\n", "<br />")) + "'>" + this.Server.HtmlEncode(strTemp) + "</span><span class='dvMsgInitHidden'>" + this.Server.HtmlEncode(r["MessageText"].ToString().Replace("\r\n", "<br />")) + "</span><br /><br />";
                }
    
                lblMessage.Text = specific;
    
                upMessage.Update();
            }
            catch (Exception ce)
            {
            }
        }
    }
    
    public string TruncateLongString(string str, int maxLength)
    {
        return str.Substring(0, maxLength);
    }
    

    从下面的截图中可以看到 title 显示正确,但消息都混在一行中:

    enter image description here

    请帮我解决。

    3 回复  |  直到 11 年前
        1
  •  10
  •   SearchForKnowledge    11 年前

    以下CSS负责处理:

    white-space: pre-wrap;
    
        2
  •  1
  •   BrettJ    11 年前

    我们制作了一个helper方法,它简单地用HTML break标记替换\r\n、\r\n和
    用于输出。我们使用原始字符将文本存储在数据库中,在编辑过程中,TextArea自然会使用换行符。只有在span中的“details page”上显示时,才应该完成到HTML break标记的转换。

        3
  •  0
  •   Oscar    11 年前

    如果需要在ddbb中存储格式化,可以使用rtf或html标记。Rtf可能更适合桌面应用,在您的情况下,您需要在文本(p、br等)中存储html标记

    推荐文章