在asp.net中处理Gridview控件中的文本框?

时间:2014-09-01 11:57:43

标签: c# html asp.net gridview

我正在开发一个评论部分页面,我使用了文本框,按钮和gridview控件来插入注释并分别显示它们。我在gridview外面有一个文本框用于添加注释,同时我还在gridview中有另一个文本框来添加对每个注释的回复。我分别在gridview控件中显示了所有注释和回复。我注意到如果我使用下面的语法从位于gridview外部的文本框输入注释

string comment = Server.HtmlEncode(TextBox2.Text.Replace("'", "''"));
comment = Server.HtmlEncode(comment.Replace("\r\n", "<br/>"));

connection.Open();
string sql = "INSERT INTO [ComTab]([Name],[Comments]) Values('" + commentor + "','" + comment + "')";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Close();

如果您要制作多段评论,我可以将此行 &lt; br /&gt;&lt; br /&gt; 以及我的评论保存到我的数据库中。所以没有关于它的问题,这就是我想要的。 现在相反,如果我使用下面的代码在

中输入位于gridview内的文本框中的回复
Button btn2 = (Button)sender;
GridViewRow row = (GridViewRow)btn2.NamingContainer;
TextBox gridtxt2 = row.FindControl("TextBox4") as TextBox;

string reply = Server.HtmlEncode(TextBox3.Text.Replace("'", "''"));
reply = Server.HtmlEncode(reply.Replace("\r\n", "<br/>"));

connection.Open();
string sql = "INSERT INTO [RepTab]([Name],[Replies]) Values('" + commentor + "','" + reply + "')";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Close();

我无法再保存此行 &lt; br /&gt;&lt; br /&gt; 以及我对我的数据库的回复,这就是为什么如果用户输入多段回复,它不会显示多段回复,而是被压缩成一段长段。那么如何将此行 &lt; br /&gt;&lt; br /&gt; 以及我的回复保存到我的数据库中?有什么建议?感谢...

1 个答案:

答案 0 :(得分:0)

无需将{n替换为<br/>或对其进行编码。您可以保存\ r \ n,然后将其打印出来,文本框将显示新行。如果您在没有控件的情况下将文本直接写入响应中,则需要确保有人没有将javascript注入到您的数据库中,这样可以在加载时执行一些讨厌的操作。

编辑 - 最终解决方案:

尝试在网格中设置要将响应呈现为

的列的text属性
Text='<%#  Eval("reply").ToString().Replace("\n", "<br />") %>'

并且在保存到db时不要替换\ n。另外,请务必输出JS干净代码以防止滥用。