ASP.Net多行文本框最大长度

9

我一直在寻找一种方法来限制文本框中的文本,它看起来像这样

<asp:TextBox runat="server" ID="tbTest" TextMode="MultiLine"  
             MaxLength="20" Rows="5" Columns="30" >
</asp:TextBox>

属性MaxLength="20"只在另一个属性TextMode="MultiLine"未设置时起作用,否则甚至不会呈现。输出的HTML如下:
<textarea name="ctl00$ContentPlaceHolder1$tbTest" 
          id="ctl00_ContentPlaceHolder1_tbTest" rows="5" cols="30">
</textarea>

如果您在这里搜索SO以解决此问题,您会得到两种建议:
  • 添加一个(asp:RegularExpression)验证器并验证控件
  • 添加一个JavaScript,在达到限制时删除最后插入的字符。
但是,大多数答案都在2013年之前,所有浏览器对maxlength的支持始于2013年,当IE10发布时(reference)。
目前,每个浏览器都支持此属性-请自行测试:https://jsfiddle.net/wuu5wne1/ 问题是如何强制ASP.Net将此属性应用于我的多行文本框?

我认为当前的浏览器没有太多变化。你仍然需要使用JS或正则表达式来工作。 - Koby Douek
3
我认为如果您从代码后台添加MaxLength属性,它会起作用,或者使用HTML的<textarea>标签,并在代码后台访问<textarea>的值。 - Manish Goswami
@ManishGoswami <textarea> 相对于 asp:TextBox 有什么不足之处吗? - Toshi
所以你可以尝试第一种选项...从代码后台设置属性。还有一个选项是使用jQuery / JavaScript /正则表达式。 - Manish Goswami
3个回答

11

欢迎来到2020年 - 这个版本现在在所有浏览器上都能使用了

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        tbTest.Attributes.Add("maxlength", "20");
    }
}

5
我的解决方案是在文档准备就绪的情况下通过jQuery手动设置maxlength属性。
$(document).ready(function ()
{
    $('#<%=tbTest.ClientID%>').prop('maxlength', 20);
}

是的,这有点hacky,但如果您想使用asp控件(我不想部署代码更改),它可以工作。


0
在Visual Studio 2019中,如果您添加了columns属性,maxLength将会起作用。
<asp:TextBox runat="server" Columns="1" MaxLength="50" class="form-control"  ID="txtFirstName" ClientIDMode="Static" required />

这里无法工作。 <asp:TextBox TextMode =“MultiLine” ID =“c_pasteptherapy” Columns =“1” MaxLength =“100” runat =“server”> </ asp:TextBox> - Jiping

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接