我写了这样一类,将用户输入的单引号换成两个单引号public class mytextbox:TextBox
{
  public override Text 
  {
     get
     {
        return base.Text.Replace("'","''");
     }
     set
     {
       base.Text = value;
     }
  }
}问题是:
每次用户输入的单引号的数目改变提交之后,文本框中的单引号后成倍增加
我的意思是能否原封不动的显示用户输入的字符

解决方案 »

  1.   

    呵呵,要不再加一句
    base.Text.Replace("''''","''");
      

  2.   

    使用参数形式的SQL语句,或使用存储过程不会有此类问题
      

  3.   

    当然成倍增加啦
    用参数形式的SQL语句,
      

  4.   

    exboy(kuku)说的对,应该用参数调用sql就可以了
    另外,对TextBox的输入数据进行HtmlEncode就更好了
      

  5.   

    大家从render事件或onprerender事件着手想想办法看,因为只有在用户改变内容之后,单引号才成倍递增
      

  6.   

    另外我想查看一下system.web.dll这个文件中textbox的写法,我学得有问题,不知这个文件能否显示源代码
      

  7.   

    ASP.NET 为您提供了几种防止脚本利用的方法: ASP.NET 通过请求验证来自动防止脚本利用。默认情况下,如果 Request 对象包含 HTML 编码的元素或某些 HTML 字符(如表示长破折号的 —),则 ASP.NET 页框架将引发一个错误。建议您为此错误在应用程序中创建一个处理程序。 
    如果您要在应用程序中显示字符串,但不信任它们,则向它们应用 HTML 编码。例如,进行编码后,标记 <b> 将变成 &lt;b&gt;。如果您正在显示的字符串来自您尚未确定信任其内容的数据库时,您可能会这样做。 
    如果您希望应用程序接受某些 HTML(例如,来自用户的某些格式设置指令),请关闭自动检查,并创建筛选器来精确定义应用程序将接受哪些 HTML。 
    安全说明   决不要禁用自动请求验证而不添加您自己的检查或筛选器。
    注意   不要创建试图只筛选出不可接受元素的筛选器,因为预料每个可能的错误输入十分困难。相反,如果您确实要创建筛选器,请创建具有可接受输入的已定义列表的筛选器。
    为了防止 SQL 语句利用,决不使用字符串串联创建 SQL 查询。相反,使用参数化查询并将用户输入分配给参数对象。有关详细信息,请参见数据适配器命令中的参数。
      

  8.   

    To:goody9807() 
    有些语句比较简单,用参数形式执行,没有必要吧
      

  9.   

    用参数 或者是proc 不会有这种问题
      

  10.   

    To stupidrobert
    虽然没有必要,但是却是好的习惯,参数和HtmlEncode都是应该用的你要继承TextBox创建自己的控件不还麻烦
    不知道你要TextBox的Render和OnPreRrender想做什么,但帮你找了找,不一定正确
    protected internal override void Render(HtmlTextWriter writer)
    {
          this.RenderBeginTag(writer);
          if (this.TextMode == TextBoxMode.MultiLine)
          {
                HttpUtility.HtmlEncode(this.Text, writer);
          }
          this.RenderEndTag(writer);
    }
    protected internal override void OnPreRender(EventArgs e)
    {
          base.OnPreRender(e);
          Page page1 = this.Page;
          if ((page1 == null) || !base.IsEnabled)
          {
                return;
          }
          if (!this.SaveTextViewState)
          {
                page1.RegisterEnabledControl(this);
          }
          if (this.AutoPostBack)
          {
                page1.RegisterPostBackScript();
                page1.RegisterFocusScript();
          }
    }
     
      

  11.   

    谢谢各位的参与,特别是Net_Soul(网 魂) 非常感谢你帮我找到这些内容,我想问题是出在:控件显示 text这个HTML标时,不应该取自身的Text属性因为取这个属时,单引号就被替换成两个单引号了看看大家还能否从这方面着手考虑这个问题,我相信我们这么多人一定可以解决这个问题的还有劳各位继续帮我想想办法...
      

  12.   

    问题解决了,在onprerender事件时加如下代码if (this.Visible && base.Text.IndexOf("'")>-1)
    {
    this.Page.RegisterStartupScript("","<script language=javascript>document.all('"+this.ClientID+
                    "').value=document.all('"+this.ClientID+"').value.replace(V_specialChar,'\\'')</script>");
    }
    base.OnPreRender (e);