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

时间:2015-03-12 13:41:24

标签: c# css asp.net

我有一个textarea,按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 个答案:

答案 0 :(得分:6)

以下CSS负责:

white-space: pre-wrap;

答案 1 :(得分:1)

我们已经制作了一个帮助方法,只需用HTML中断标记来替换\ r \ n,\ n和\ r \ n输出。我们使用原始\ r \ n字符将文本存储在数据库中,在编辑期间,TextArea自然地遵循换行符。只有在&#34;详细信息页面上显示时才会出现#34;在一个范围内,应该完成到HTML中断标记的转换。

答案 2 :(得分:0)

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