【问题标题】:Server.htmlencode and TextBox with MaxSizeServer.htmlencode 和带 MaxSize 的 TextBox
【发布时间】:2014-07-13 02:11:44
【问题描述】:

我在页面上有一个 TextArea 输入。此文本框是多行的,最大大小为 500 个字符。我正在使用 .NET 4.0。

<asp:TextBox ID="TxtOther" Width="530px" TextMode="MultiLine" Style="word-wrap: break-word;height: 300px; overflow: auto; vertical-align: top" runat="server" AutoComplete="off" MaxLength="500" /> 

情况是这样的(例如):用户可以在 textarea 中输入大约 499 个字符,其中包括一个“

现在,不好的地方在于代码隐藏,它将获取输入的文本并对其执行 Server.HtmlEncode。

如果我手动输入显然 maxlength 将被处理,但它仍然可能发生。如果您进行剪切/复制和粘贴,则不会处理 maxlength,但无论如何我只会取 500 个字符,但同样的情况仍然可能发生在那里。

它最终会进入数据库,而数据库列是 nvarchar 500。它不是文本或类似的东西。无论出于何种原因,它都是一个 nvarchar 500,这不是我可以改变的。

如何让客户端上的代码对输入的文本进行编码,以验证编码后它仍然小于 500?我愿意截断超过 500 个字符。

【问题讨论】:

    标签: c# asp.net vb.net encoding


    【解决方案1】:

    当您拥有 MaxLenght="500" 时,验证发生在服务器上 - 在客户端提交用户输入之后。 Server.HtmlEncode 也在服务器上执行。

    如果您创建客户端自定义验证器,您可以将输入限制为少于 500 个字符,并消除第 500 个字符为“”的编码问题。

    它还可以节省往返服务器的费用。

    在您的网页上,您需要添加自定义验证器:

    <asp:CustomValidator ID="CustValid500" runat="server"
         ControlToValidate ="TxtOther"
         ErrorMessage ="500 or more characters are not allowed"
         ClientValidationFunction = "ValidateLength" >
    </asp:CustomValidator>
    

    还有一点 javascript:

    <script type ="text/javascript">
         function validateLength(oSrc, args)
         { args.IsValid = (args.Value.length < 500); }
    </script>
    

    【讨论】:

    • 我已经有一个 javascript 来处理/处理长度。因此,我完全排除了 maxlength 问题,但它仍然存在。所以,我想做的是允许用户输入或复制/粘贴。问题是他们是否输入了 499 个字符;如果他们保存服务器端将执行 Server.htmlencoding。结果是超过 500 个字符,它只需要 500 个(截断其余字符)但是我想要不允许整个复制/粘贴,如果它正在编码它将导致 > 500。我该怎么做?
    • 我所拥有的与您所拥有的很接近,尽管没有长度验证器。我有一个javascript而不是CustomerValidator(本质上是服务器端而不是客户端),而我拥有的是客户端。但它是客户端的编码部分,以匹配服务器端将执行的操作。有什么我可以做的吗,还是我只需要留在服务器端?
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2011-05-21
    • 2022-11-07
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多