如何在';位于详细视图(ASP.NET)中的

如何在';位于详细视图(ASP.NET)中的,asp.net,textbox,count,character,detailsview,Asp.net,Textbox,Count,Character,Detailsview,我想实现一个字符计数器,它显示您在ASP.NET中我的网页的文本框中键入的字符数。此文本框嵌套在DetailsView中 下面列出的包含(字符计数脚本)+(文本框的onkeypress)+(只读输入)的正常解决方案不起作用: 剧本: <script type="text/javascript"> function textCounter(field, countfield, maxlimit) { if (field.value.length > ma

我想实现一个字符计数器,它显示您在ASP.NET中我的网页的文本框中键入的字符数。此文本框嵌套在DetailsView中

下面列出的包含(字符计数脚本)+(文本框的onkeypress)+(只读输入)的正常解决方案不起作用:

剧本:

<script type="text/javascript">

    function textCounter(field, countfield, maxlimit) {
        if (field.value.length > maxlimit)
            field.value = field.value.substring(0, maxlimit);
        else
            countfield.value = maxlimit - field.value.length;
    }

</script>

函数textCounter(字段、countfield、maxlimit){
如果(field.value.length>maxlimit)
field.value=field.value.substring(0,maxlimit);
其他的
countfield.value=maxlimit-field.value.length;
}
文本框:

<asp:TextBox ID="TextBox1" runat="server" 
onkeyup="textCounter(TextBox1, this.DetailsView.remLen, 300);"
onkeydown="textCounter(TextBox1, this.DetailsView.remLen, 300);"
TextMode="MultiLine" Text='<%# Bind("idea") %>'></asp:TextBox>
在DetailsView中嵌套文本框会破坏文本框的命名约定。我在那个链接中尝试了C#解决方案,但没有成功

我怎样才能做到这一点?JQuery似乎是一个答案,但我不知道像
var Text=$(“span[id$=TextBox1]”)这样的代码在哪里将适合我的文件。需要帮助


我正在用VB与Microsoft Visual Web Developer 2010 Express合作(我是一个noob,主要使用程序的图形用户界面,在Java的Android上有一些编程经验)。如果有人有C#解决方案,我不介意。

您需要使用文本框的
ClientID
属性在javascript中运行时获取它:

<asp:TextBox ID="TextBox1" runat="server" 
onkeyup="textCounter('<%= TextBox1.ClientID %>', this.DetailsView.remLen, 300);"
onkeydown="textCounter('<%= TextBox1.ClientID %>', this.DetailsView.remLen, 300);"
TextMode="MultiLine" Text='<%# Bind("idea") %>'></asp:TextBox>

如果它位于详细信息视图中,则可能必须使用
FindControl
。例如:

<asp:TextBox ID="TextBox1" runat="server" 
onkeyup="textCounter('<%= ((TextBox)myDetailView.FindControl("TextBox1")).ClientID; %>', this.DetailsView.remLen, 300);"
onkeydown="textCounter('<%= ((TextBox)myDetailView.FindControl("TextBox1")).ClientID; %>', this.DetailsView.remLen, 300);"
TextMode="MultiLine" Text='<%# Bind("idea") %>'></asp:TextBox>

如果您使用的是ASP.NET 4.0或更高版本,则可以将ClientIDMode属性设置为static。这将保留控件的id,而不是由.NET重命名;例如,LogoImageButton将被保留,而不是.NET将其呈现为ctl00\U LogoImageButton。现在您的JavaScript可以找到您的控件

免责声明: 我在ContentPlaceHolder级别设置clientMode=“Static”,以便在文本框中添加一个计数器,这样我就知道它可以工作。但是根据Rick Strahl(他是一个非常聪明的人)的说法,您不能使用控件并指定ClientMode。就像我说的,我的实现非常有效

无论如何,我建议你阅读Rick关于这个主题的博客,因为他涵盖了一些与继承相关的重要问题。还有一些关于实现相同目标的替代方法的有趣评论。即使您使用的是早期版本的.NET,其中一个可能也能正常工作


里克的博客:

大家好,谢谢你们的回答。我很抱歉,但我的另一个项目需要我的注意,因此迟了答复。下面的两个解决方案都不适用于我,输入仍然不会根据文本框中的字符数进行编辑。如果有帮助的话,我的文本框在一个ASP中;我把它转换成了一个模板字段。我将寻找解决方案,每当用户键入超过300个字符或其他字符时,都会出现警告,而不显示他还剩下多少字符。
<asp:TextBox ID="TextBox1" runat="server" 
onkeyup="textCounter('<%= ((TextBox)myDetailView.FindControl("TextBox1")).ClientID; %>', this.DetailsView.remLen, 300);"
onkeydown="textCounter('<%= ((TextBox)myDetailView.FindControl("TextBox1")).ClientID; %>', this.DetailsView.remLen, 300);"
TextMode="MultiLine" Text='<%# Bind("idea") %>'></asp:TextBox>