C# 用c语言中的图像替换文本#

C# 用c语言中的图像替换文本#,c#,asp.net,C#,Asp.net,这是我的密码: [WebMethod] public static void SendChatMessage(string msg, int ToClient) { if (msg != null && ToClient != 0) { if (msg.Contains(":-)")) msg.Replace(":-)", "<img src='Styles/emojie/smile.png' /> "); els

这是我的密码:

[WebMethod]
public static void SendChatMessage(string msg, int ToClient)
{
    if (msg != null && ToClient != 0)
    {
        if (msg.Contains(":-)")) msg.Replace(":-)", "<img src='Styles/emojie/smile.png'   />  ");
        else if (msg.Contains(":-(")) msg.Replace(":-(", "<img src='Styles/emojie/sad.png'   />  ");
        else if (msg.Contains(":'-(")) msg.Replace(":'-(", "<img src='Styles/emojie/cry.png'   />  ");
        else if (msg.Contains(":-$")) msg.Replace(":-$", "<img src='Styles/emojie/shy.png'   />  ");
        int FromClientID = Convert.ToInt32(HttpContext.Current.Session["ClientID"]);
        string query = "insert into chat (FROM_CLIENT,TO_CLIENT,CHAT_MSG) values (" + FromClientID + "," + ToClient + ",'" + msg + "')";
        new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).Insert(query);
    }
}
[WebMethod]
公共静态void SendChatMessage(字符串msg,int到客户端)
{
if(msg!=null&&ToClient!=0)
{
如果(msg.Contains(“:-”)msg.Replace(“:-)”,”);
如果(msg.Contains(“:-(”)msg.Replace(“:-(”,”);
如果(msg.Contains(“:”-(“”))msg.Replace(“:”-(“,”);
如果(msg.Contains(“:-$”)msg.Replace(“:-$”,”);
int FromClientID=Convert.ToInt32(HttpContext.Current.Session[“ClientID]”);
string query=“插入聊天(从客户端,到客户端,聊天信息)值(“+FromClientID+”,“+ToClient+”,“+MSG+”)”;
新的SQLHelper(SQLHelper.connectionString.WebSiteConnectionString.Insert(查询);
}
}

消息按原样发送到数据库,但没有替换我做错了什么?

您假设
replace
修改了现有的*字符串。它没有。它返回一个新字符串,并进行了修改。它必须这样做,因为字符串在.NET中是不可变的。您可能希望更改的所有字符串操作字符串(
Substring
ToUpper
等)实际上返回一个新字符串

所以你所有的电话都是这样的:

msg.Replace(...);
应该是:

msg = msg.Replace(...);
您还应该开始使用参数化SQL,而不是将所有值直接放入SQL查询中。这将使代码更具可读性,避免并消除许多数据类型转换问题

此外,我会在每个
if
语句上使用大括号,并将语句放在单独的行上:

if (msg.Contains(":-)"))
{
     msg = msg.Replace(":-)", "<img src='Styles/emojie/smile.png'   />  ");
}

更简单。

您假设
Replace
修改现有的*字符串。它不会。它会返回一个新字符串,并进行修改。它必须这样做,因为字符串在.NET中是不可变的。您可能希望更改字符串的所有字符串操作(
子字符串
ToUpper
等)实际返回一个新的

所以你所有的电话都是这样的:

msg.Replace(...);
应该是:

msg = msg.Replace(...);
您还应该开始使用参数化SQL,而不是将所有值直接放入SQL查询中。这将使代码更具可读性,避免并消除许多数据类型转换问题

此外,我会在每个
if
语句上使用大括号,并将语句放在单独的行上:

if (msg.Contains(":-)"))
{
     msg = msg.Replace(":-)", "<img src='Styles/emojie/smile.png'   />  ");
}

更简单。

调用
string.Replace
实际上不会更改字符串,因此需要重新分配它:

msg = msg.Replace( ... );

调用
string.Replace
实际上不会更改字符串,因此需要重新分配:

msg = msg.Replace( ... );

因此,如果我的消息是“示例:-”),那么它将在替换“示例”之后出现??如果我的消息是“示例:-”)“这将是在替换后”示例“??还有另一个想法:我将在读取数据库后进行替换,而不是在写入数据库之前。使用上述方法,您可能会在URL更改时遇到问题。或者您希望实现一个新的客户端,而不是在浏览器中运行(甚至不使用html作为标记)。此外,如果您现在添加新的笑脸,它们将只应用于未来的消息,而不会应用于过去的消息。不过,请注意,jon skeet完美阐述了您问题的答案(多么荣幸:D)另外,还有一个想法:我会在读取数据库之后进行替换,而不是在写入数据库之前。使用上述方法,您可能会在URL更改时遇到问题。或者您希望实现一个新的客户端,而不是在浏览器中运行(甚至不使用html作为标记)。此外,如果您现在添加新的笑脸,它们将只应用于未来的消息,而不会应用于过去的消息。不过,请注意,jon skeet完美阐述了您问题的答案(多么荣幸:D)