使用MultiLine TextBox(生成TextArea)设置时,MaxLength属性无效。什么是最好的解决方法?我希望以最少的丑陋javascript等方式获得基本的,预期的功能。只是阻止用户输入超过最大字符数。
答案 0 :(得分:22)
如果您不关心旧浏览器(请参阅supported browsers here),
你可以像这样设置MaxLength
<asp:TextBox ID="txt1" runat="server" TextMode="MultiLine" MaxLength="100" />
并强制将其打印到HTML
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
txt1.Attributes.Add("maxlength", txt1.MaxLength.ToString());
}
答案 1 :(得分:5)
如果您想让用户知道他在写作时是否超过了字符数量,您可以使用附加到按键事件的javascript函数。如果达到maxlenght,此函数将测试输入的长度并取消字符渲染。
另一种选择是使用RegularExpressionValidator
控件来验证提交时的输入。
在我看来,第一种选择要好得多。
我没有添加任何代码,因为google充满了各种口味的示例,这是一项非常常见的任务。
Here您有一个可能有用的示例搜索。
答案 2 :(得分:5)
嘿pukipuki你可以做如下:
<asp:TextBox ID="txtValue" runat="server"TextMode="MultiLine" Rows="10"Columns="50"></asp:TextBox>
$(document).ready(function(){
var MaxLength = 250;
$('#txtValue').keypress(function(e)
{
if ($(this).val().length >= MaxLength)
{
e.preventDefault();
}
});});
您可以在以下链接中查看更多内容: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html
答案 3 :(得分:3)
这是一个跨浏览器解决方案:
<asp:TextBox TextMode="MultiLine" runat="server" ID="txtPurpose" Columns="50" Rows="2" onkeypress="return isokmaxlength(event,this,255);" ClientIDMode="static"></asp:TextBox>
Javascript:
function isokmaxlength(e,val,maxlengt) {
var charCode = (typeof e.which == "number") ? e.which : e.keyCode
if (!(charCode == 44 || charCode == 46 || charCode == 0 || charCode == 8 || (val.value.length < maxlengt))) {
return false;
}
}
你必须考虑复制和粘贴。这有点棘手,我只是用Jquery禁用它。但是您可以创建自己的函数来执行更复杂的验证。但就我而言,不允许复制和粘贴。
Jquery禁用复制和粘贴:
jQuery(function ($) {
$("#txtPurpose").bind({
paste: function (e) {
e.preventDefault();
}
});
});
答案 4 :(得分:1)
如果使用模型对象绑定到该文本框,则可以使用DataAnnotations属性设置该属性的maxlength。我基于MVC,但它也适用于ASP.NET!
这样你就不会乱用任何Javascript或在标记中设置任何内容。
答案 5 :(得分:0)
试试这个..
Dim script As String = ""
script = script + " <script type='text/javascript'> function CheckLength(obj) {"
script = script + " var object = document.getElementById(obj);"
script = script + " if (object.value.length > 5) {"
script = script + " object.focus();"
script = script + " object.value = object.value.substring(0, 5); "
script = script + " object.scrollTop = object.scrollHeight; "
script = script + " return false;"
script = script + " }"
script = script + " return true;"
script = script + " }</script>"
Dim b As New TextBox()
b.ID = "btnSomeButton"
b.TextMode = TextBoxMode.MultiLine
Mypanel.Controls.Add(b)
b.Attributes.Add("onkeyup", "return CheckLength('" & b.ClientID & "');")
Page.ClientScript.RegisterStartupScript(Page.GetType(), "key", script, False)
答案 6 :(得分:0)
要强制asp.net为页面或整个网站上的所有多行文本框发送maxlength属性, 以上述Aximili的答案为基础:
我使用David Findley的控件扩展方法 https://weblogs.asp.net/dfindley/linq-the-uber-findcontrol 并在此SO帖子中引用 Loop through all controls on asp.net webpage
namespace xyz.Extensions
{
public static class PageExtensions
{
public static IEnumerable<Control> All(this ControlCollection controls)
{
foreach (Control control in controls)
{
foreach (Control grandChild in control.Controls.All())
yield return grandChild;
yield return control;
}
}
}
}
确保在步骤1中引用扩展方法的名称空间。
在Page_Load函数中放置以下代码:
if (!IsPostBack){
//force textareas to display maxlength attribute
Page.Controls.All().OfType<TextBox>().ToList()
.Where(x => x.TextMode == TextBoxMode.MultiLine && x.MaxLength > 0)
.ToList().ForEach(t => t.Attributes.Add("maxlength", t.MaxLength.ToString()));
}