【问题标题】:ASP.NET Textbox omits the string after the double quoteASP.NET 文本框省略了双引号后的字符串
【发布时间】:2012-01-04 18:38:53
【问题描述】:

我在我的页面中添加了一个 ASP.NET 文本框,并且我确实有下一个和上一个按钮。我输入了字符串,在文本框中说 Hello "World"。我点击了下一个按钮,它将显示评论页面(不可编辑),所有数据都存储在 sessioin 中。在此之后,我单击上一个按钮,该按钮应该向我显示输入字段(编辑页面)。在此期间,我从会话中获取数据并将其显示回 ASP.NET 文本框。

当我看到该页面时,双引号后输入的内容将从 ASP.NET 文本框中删除。也就是说,我只能看到Hello

我的要求是,我应该允许用户输入双引号。

有没有办法解决这个问题???

【问题讨论】:

  • 你试过调试吗?会话中的数据是否正确?
  • 首先,您需要知道什么是删除双引号。我建议在发布后调试并查看您在服务器端获得的值。如果值没问题,那就继续找双引号去掉的地方。

标签: c# asp.net


【解决方案1】:

ASP.NET 不会删除文本框中的引号,因此我建议发布代码以供审核。

但是,在某些情况下,允许在输入字段中使用引号可能触发请求验证,在这种情况下,您会看到关于潜在危险请求的非常具体的错误。

说到这一点,应该检查允许引用的文本字段是否存在 XSS 攻击。

【讨论】:

    【解决方案2】:

    我现在重现你遇到的情况。它是通过在 value 属性中使用双引号引起的,

    它将与文本框中也包含双引号的值冲突。所以你应该

    在输出语法中将双引号更改为单引号。

    你可以试试下面的代码:

    output.Write(string.Format("<input name=\"{0}\" id=\"{0}\" type=\"text\" value=\'{1}\'{2}/>", UniqueID, Text, args));
    

    【讨论】:

      【解决方案3】:

      我之前没遇到过这个问题,用户在文本框中输入双引号是可以的。

      你可以检查你是否有一些程序逻辑来过滤报价或调试你的代码

      找到原因。下面是一个简单的测试代码。

      <form id="form1" runat="server">
      <div>
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
          <asp:Button
          ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
          <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" />
      
      </div>
      </form>
      
      protected void Button1_Click(object sender, EventArgs e)
      {
          Session.Add("KK",this.TextBox1.Text);
      }
      protected void Button2_Click(object sender, EventArgs e)
      {
          this.TextBox1.Text = Session["KK"] as string;
      }
      

      【讨论】:

      • 谢谢大家,实际上我使用的是继承自 System.Web.UI.WebControls.TextBox 的自定义控件。在控件的渲染方法中, output.Write(string.Format("", UniqueID, 文本, args));在这个 Text 值没有正确转义。
      【解决方案4】:

      如果您覆盖“渲染”,您还可以利用您正在输出到HtmlTextWriter 的内容,这为创建 html 提供了一些帮助。

      虽然下面的示例肯定比您的方法更详细,但它也会使输出了解正在发生的事情并允许 HtmlTextWriter(输出)插入值等。HtmlTextWriter 然后将确保执行正确的转义关于价值观。

        protected override void RenderContents(HtmlTextWriter output)
        {
              output.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
              output.AddAttribute(HtmlTextWriterAttribute.Type, Text);
              output.AddAttribute(HtmlTextWriterAttribute.Value, Value);
              output.RenderBeginTag(HtmlTextWriterTag.Input);
              output.RenderEndTag();
        }
      

      您也可以使用System.Web.HttpUtility.HtmlEncode 来避免字符值等问题。

      【讨论】:

        猜你喜欢
        • 2013-09-15
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 2014-09-20
        • 2015-10-22
        相关资源
        最近更新 更多