带有MaxSize的Server.htmlencode和TextBox

时间:2014-07-12 16:04:01

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

我在页面上有一个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个字符的内容。

1 个答案:

答案 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>