我在页面上有一个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个字符,并且包含“&lt;”标志。显然,&lt;当编码时将具有&amp; lt。这使得输入的文本长度大于500.
现在,糟糕的是代码隐藏它将输入文本并执行它的Server.HtmlEncode。
如果我手动输入显然会处理maxlength,但它仍然会发生。如果你进行剪切/复制和粘贴,那么maxlength将不会被处理,但我仍然只需要500个字符,但同样的情况仍然会在那里发生。
它最终将进入数据库,DB列是nvarchar 500.它不是文本或类似的东西。无论出于何种原因,它都是nvarchar 500,而且我不能改变它。
如何让客户端的代码对输入的文本进行编码,以验证编码后它仍然小于500?我愿意截断超过500个字符的内容。
答案 0 :(得分:0)
如果MaxLenght =“500”,则在客户端提交用户输入后,在服务器上进行验证。 Server.HtmlEncode也在服务器上执行。
如果您创建一个客户端自定义验证器,您可以将限制输入处理为少于500个字符,并消除编码问题,第500个字符为'&lt;'或'&gt;'。
它也可以节省往返服务器的次数。
在您的网页上,您需要添加自定义验证器:
<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>