关于自定义控件问题?谢谢 在客户端用js判断,没有不要继承textBox(按你现在的说法) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 按你现在的说法在客户端用js判断即可,没有必要继承TextBox 加一个RegularExpressionValidator控件就行了。--------------------------------AspNetPager 免费分页控件4.2版发布,同时发布最新源代码,欢迎下载:http://www.webdiyer.com net_lover(孟子E章) :如果写称控件就可以实现重用,否则我在很多界面都需要写Js判断。当然,验证正整数还是比较简单的,还有比较复杂验证而且工程中用的很多。所以我想写成控件,如此可以提高效率。谢谢:) webdiyer(陕北吴旗娃) :使用RegularExpressionValidator不是很方便……只要知道RegularExpressionValidator的实现原理,就能作出我要的控件。但是我现在不知道怎么做……郁闷中。 我看你要实现的功能和我在AspNetPager中验证用户输入的页索引完全一样,你是否可以下载源代码看一下?地址在:http://www.webdiyer.com 下载控件页面。 在代码里写 javascript 自定义控件当然好,如果真想要的话,我写了一个,还能自适应IE和NetScape:using System;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel;namespace MyControl{ /// <summary> /// WebCustomControl1 的摘要说明。 /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] public class NumberTextBox : System.Web.UI.WebControls.WebControl { private string text=""; string ieScript= "<script language=\"javascript\">\n" + "<!--\n" + "var keys=new Array(8,9,13,33,34,35,36,37,39,45,46);\n" + "function isKeyvalid(keyCode)\n" + "{\n" + "if ((keyCode >= 48 && keyCode <= 57||" + "isAuxKey(keyCode))\n" + "{\n" + " reutrn true;\n}\n" + "else{\n" + " alert(\"Please input Number!\");\n return false;\n" + "}\n" + "function isAuxKey(keyCode)\n" + "{\n" + " for (i=0 i<keys.length;i++)\n" + " if (keyCode == keys[i])\n" + " return true;\n" + " return false;\n" + "}\n" + "-->\n" + "</script>"; string nvScript= "<script language=\"javascript\">\n" + "<!--\n" + "function isKeyvalid(keyCode)\n" + "{\n" + "if ((keyCode >= 48 && keyCode <= 57||" + "keyCode==8||keyCode==13\n" + "{\n" + " reutrn true;\n}\n" + "else{\n" + " alert(\"Please input Number!\");\n return false;\n" + "}\n" + "-->\n" + "</script>"; [Bindable(true), Category("Appearance"), DefaultValue("")] public string Text { get { return text; } set { Convert.ToInt32(text); text = value; } } protected override void OnPreRender(EventArgs e) { string brw=Context.Request.Browser.Type.ToUpper(); int ver=Context.Request.Browser.MajorVersion; if (brw.IndexOf("IE")>-1 && ver>=4) { Page.RegisterClientScriptBlock("NumberTextBoxScript",ieScript); } else if (brw.IndexOf("NETSCAPE")>-1 && ver>=4) { Page.RegisterClientScriptBlock("NumberTextBoxScript",nvScript); } } /// <summary> /// 将此控件呈现给指定的输出参数。 /// </summary> /// <param name="output"> 要写出到的 HTML 编写器 </param> protected override void Render(HtmlTextWriter output) { string brw=Context.Request.Browser.Type.ToUpper(); int ver=Context.Request.Browser.MajorVersion; output.WriteBeginTag("input"); output.WriteAttribute("type","text"); output.WriteAttribute("name",UniqueID); if (ID!=null) output.WriteAttribute("id",ClientID); if (Text.Length>0) output.WriteAttribute("value","Text"); if (brw.IndexOf("IE")>-1 && ver>=4) output.WriteAttribute("onkeydown","javascript:return isKeyValid(window.event.keyCode)"); else if(brw.IndexOf("NETSCAPE")>-1 && ver>=4) output.WriteAttribute("onkeydown","javascript:return isKeyValid(event.which)"); output.Write(HtmlTextWriter.TagRightChar); } }} jjcccc:是<win:NumberTextBox ID="MyCounter" RunAt="server" />调用吗??我运行时提示脚本错误,怎么回事阿? 编译好后,把编译好的dll拷贝到你的应用程序的bin目录下,如何在vs.net的工具箱中-自定义工具箱和项目的引用中加入刚才的dll,然后向.net自己的web控件一样使用(拖到form上,vs.net 自动会生成<@Register ...>和实际标记的(默认一般是类似与:cc1:NumberTextBox ....) 如何在vs.net的工具箱中---》然后在vs.net的工具箱中..... jjcccc:问题肯定出在script脚本上,我的调用方法没有问题。我调用该控件的页面可以查看到输入框,并且也可输入,但是我却可以输入字符串…… jjcccc:而且网页的左下角还有IE错误的提示…… 可能,我可没有实际测试,只是写一个例子供你参考。你看看Ie里的原文件和错误,检查改一下控件里script脚本。我也看看 对不起,因为没有测试,小错误还不少,下面是经过完全测试过的:using System;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel;namespace MyControl{ /// <summary> /// WebCustomControl1 的摘要说明。 /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:NumberTextBox runat=server></{0}:NumberTextBox>")] public class NumberTextBox : System.Web.UI.WebControls.WebControl { private string text=""; string ieScript= "<script language=\"javascript\">\n" + "<!--\n" + "var keys=new Array(8,9,13,33,34,35,36,37,39,45,46);\n" + "function isKeyValid(keyCode)\n" + "{\n" + "if ((keyCode >= 48 && keyCode <= 57)||" + "isAuxKey(keyCode))\n" + "{\n" + " return true;\n}\n" + "else\n{\n" + " alert(\"Please input Number!\");\n return false;\n" + "}\n}\n" + "function isAuxKey(keyCode)\n" + "{\n" + " for (i=0; i<keys.length;i++)\n" + " if (keyCode == keys[i])\n" + " return true;\n" + " return false;\n" + "}\n" + "-->\n" + "</script>"; string nvScript= "<script language=\"javascript\">\n" + "<!--\n" + "function isKeyvalid(keyCode)\n" + "{\n" + "if ((keyCode >= 48 && keyCode <= 57||" + "keyCode==8||keyCode==13\n" + "{\n" + " reutrn true;\n}\n" + "else{\n" + " alert(\"Please input Number!\");\n return false;\n" + "}\n" + "-->\n" + "</script>"; [Bindable(true), Category("Appearance"), DefaultValue("")] public string Text { get { return text; } set { Convert.ToInt32(value); text = value; } } protected override void OnPreRender(EventArgs e) { string brw=Context.Request.Browser.Type.ToUpper(); int ver=Context.Request.Browser.MajorVersion; if (brw.IndexOf("IE")>-1 && ver>=4) { Page.RegisterClientScriptBlock("NumberTextBoxScript",ieScript); } else if (brw.IndexOf("NETSCAPE")>-1 && ver>=4) { Page.RegisterClientScriptBlock("NumberTextBoxScript",nvScript); } } /// <summary> /// 将此控件呈现给指定的输出参数。 /// </summary> /// <param name="output"> 要写出到的 HTML 编写器 </param> protected override void Render(HtmlTextWriter output) { string brw=Context.Request.Browser.Type.ToUpper(); int ver=Context.Request.Browser.MajorVersion; output.WriteBeginTag("input"); output.WriteAttribute("type","text"); output.WriteAttribute("name",UniqueID); if (ID!=null) output.WriteAttribute("id",ClientID); if (Text.Length>0) output.WriteAttribute("value","Text"); if (brw.IndexOf("IE")>-1 && ver>=4) output.WriteAttribute("onkeydown","javascript:return isKeyValid(window.event.keyCode)"); else if(brw.IndexOf("NETSCAPE")>-1 && ver>=4) output.WriteAttribute("onkeydown","javascript:return isKeyValid(event.which)"); output.Write(HtmlTextWriter.TagRightChar); } }} 还有,上面的针对Netscape浏览器的脚本也要改成这样: string nvScript= "<script language=\"javascript\">\n" + "<!--\n" + "function isKeyvalid(keyCode)\n" + "{\n" + "if ((keyCode >= 48 && keyCode <= 57||" + "keyCode==8||keyCode==13\n" + "{\n" + " return true;\n}\n" + "else\n{\n" + " alert(\"Please input Number!\");\n return false;\n" + "}\n}\n" + "-->\n" + "</script>"; 看看这个数据库连接字符串吧 如何设计框架? 急!高手解答Asp.net关与Iframe的问题 JS调用的小问题 刚准备做一个B/S项目,必须问清楚一个简单但很重要的关于window.open()的经验问题 关于弹出模态窗口的问题 关于IE WebControls的问题,高手指点一下吧,谢谢了 还是数据库备份和恢复的问题,100分 请问客户端脚本可以访问服务器端的数据库么?若能应该怎么操作? 在DataList中的File Field控件,怎么找不到,谢谢! 关于DataGrid的问题 如果<input type=file控件没有runat=server,如何上传文件
在客户端用js判断即可,没有必要继承TextBox
AspNetPager 免费分页控件4.2版发布,同时发布最新源代码,欢迎下载:http://www.webdiyer.com
谢谢:)
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;namespace MyControl
{
/// <summary>
/// WebCustomControl1 的摘要说明。
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
public class NumberTextBox : System.Web.UI.WebControls.WebControl
{
private string text=""; string ieScript=
"<script language=\"javascript\">\n" +
"<!--\n" +
"var keys=new Array(8,9,13,33,34,35,36,37,39,45,46);\n" +
"function isKeyvalid(keyCode)\n" +
"{\n" +
"if ((keyCode >= 48 && keyCode <= 57||" +
"isAuxKey(keyCode))\n" +
"{\n" +
" reutrn true;\n}\n" +
"else{\n" +
" alert(\"Please input Number!\");\n return false;\n" +
"}\n" +
"function isAuxKey(keyCode)\n" +
"{\n" +
" for (i=0 i<keys.length;i++)\n" +
" if (keyCode == keys[i])\n" +
" return true;\n" +
" return false;\n" +
"}\n" +
"-->\n" +
"</script>"; string nvScript=
"<script language=\"javascript\">\n" +
"<!--\n" +
"function isKeyvalid(keyCode)\n" +
"{\n" +
"if ((keyCode >= 48 && keyCode <= 57||" +
"keyCode==8||keyCode==13\n" +
"{\n" +
" reutrn true;\n}\n" +
"else{\n" +
" alert(\"Please input Number!\");\n return false;\n" +
"}\n" +
"-->\n" +
"</script>"; [Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return text;
} set
{
Convert.ToInt32(text);
text = value;
}
}
protected override void OnPreRender(EventArgs e)
{
string brw=Context.Request.Browser.Type.ToUpper();
int ver=Context.Request.Browser.MajorVersion; if (brw.IndexOf("IE")>-1 && ver>=4)
{
Page.RegisterClientScriptBlock("NumberTextBoxScript",ieScript);
}
else if (brw.IndexOf("NETSCAPE")>-1 && ver>=4)
{
Page.RegisterClientScriptBlock("NumberTextBoxScript",nvScript);
}
} /// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
string brw=Context.Request.Browser.Type.ToUpper();
int ver=Context.Request.Browser.MajorVersion; output.WriteBeginTag("input");
output.WriteAttribute("type","text");
output.WriteAttribute("name",UniqueID);
if (ID!=null)
output.WriteAttribute("id",ClientID);
if (Text.Length>0)
output.WriteAttribute("value","Text"); if (brw.IndexOf("IE")>-1 && ver>=4)
output.WriteAttribute("onkeydown","javascript:return isKeyValid(window.event.keyCode)");
else if(brw.IndexOf("NETSCAPE")>-1 && ver>=4)
output.WriteAttribute("onkeydown","javascript:return isKeyValid(event.which)"); output.Write(HtmlTextWriter.TagRightChar);
}
}
}
我运行时提示脚本错误,怎么回事阿?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;namespace MyControl
{
/// <summary>
/// WebCustomControl1 的摘要说明。
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:NumberTextBox runat=server></{0}:NumberTextBox>")]
public class NumberTextBox : System.Web.UI.WebControls.WebControl
{
private string text=""; string ieScript=
"<script language=\"javascript\">\n" +
"<!--\n" +
"var keys=new Array(8,9,13,33,34,35,36,37,39,45,46);\n" +
"function isKeyValid(keyCode)\n" +
"{\n" +
"if ((keyCode >= 48 && keyCode <= 57)||" +
"isAuxKey(keyCode))\n" +
"{\n" +
" return true;\n}\n" +
"else\n{\n" +
" alert(\"Please input Number!\");\n return false;\n" +
"}\n}\n" +
"function isAuxKey(keyCode)\n" +
"{\n" +
" for (i=0; i<keys.length;i++)\n" +
" if (keyCode == keys[i])\n" +
" return true;\n" +
" return false;\n" +
"}\n" +
"-->\n" +
"</script>"; string nvScript=
"<script language=\"javascript\">\n" +
"<!--\n" +
"function isKeyvalid(keyCode)\n" +
"{\n" +
"if ((keyCode >= 48 && keyCode <= 57||" +
"keyCode==8||keyCode==13\n" +
"{\n" +
" reutrn true;\n}\n" +
"else{\n" +
" alert(\"Please input Number!\");\n return false;\n" +
"}\n" +
"-->\n" +
"</script>"; [Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return text;
} set
{
Convert.ToInt32(value);
text = value;
}
}
protected override void OnPreRender(EventArgs e)
{
string brw=Context.Request.Browser.Type.ToUpper();
int ver=Context.Request.Browser.MajorVersion; if (brw.IndexOf("IE")>-1 && ver>=4)
{
Page.RegisterClientScriptBlock("NumberTextBoxScript",ieScript);
}
else if (brw.IndexOf("NETSCAPE")>-1 && ver>=4)
{
Page.RegisterClientScriptBlock("NumberTextBoxScript",nvScript);
}
} /// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
string brw=Context.Request.Browser.Type.ToUpper();
int ver=Context.Request.Browser.MajorVersion; output.WriteBeginTag("input");
output.WriteAttribute("type","text");
output.WriteAttribute("name",UniqueID);
if (ID!=null)
output.WriteAttribute("id",ClientID);
if (Text.Length>0)
output.WriteAttribute("value","Text"); if (brw.IndexOf("IE")>-1 && ver>=4)
output.WriteAttribute("onkeydown","javascript:return isKeyValid(window.event.keyCode)");
else if(brw.IndexOf("NETSCAPE")>-1 && ver>=4)
output.WriteAttribute("onkeydown","javascript:return isKeyValid(event.which)"); output.Write(HtmlTextWriter.TagRightChar);
}
}
}
string nvScript=
"<script language=\"javascript\">\n" +
"<!--\n" +
"function isKeyvalid(keyCode)\n" +
"{\n" +
"if ((keyCode >= 48 && keyCode <= 57||" +
"keyCode==8||keyCode==13\n" +
"{\n" +
" return true;\n}\n" +
"else\n{\n" +
" alert(\"Please input Number!\");\n return false;\n" +
"}\n}\n" +
"-->\n" +
"</script>";