在客户端用js判断,没有不要继承textBox(按你现在的说法)

解决方案 »

  1.   

    按你现在的说法
    在客户端用js判断即可,没有必要继承TextBox
      

  2.   

    加一个RegularExpressionValidator控件就行了。--------------------------------
    AspNetPager 免费分页控件4.2版发布,同时发布最新源代码,欢迎下载:http://www.webdiyer.com
      

  3.   

    net_lover(孟子E章) :如果写称控件就可以实现重用,否则我在很多界面都需要写Js判断。当然,验证正整数还是比较简单的,还有比较复杂验证而且工程中用的很多。所以我想写成控件,如此可以提高效率。
    谢谢:)
      

  4.   

    webdiyer(陕北吴旗娃) :使用RegularExpressionValidator不是很方便……只要知道RegularExpressionValidator的实现原理,就能作出我要的控件。但是我现在不知道怎么做……郁闷中。
      

  5.   

    我看你要实现的功能和我在AspNetPager中验证用户输入的页索引完全一样,你是否可以下载源代码看一下?地址在:http://www.webdiyer.com 下载控件页面。
      

  6.   

    在代码里写 javascript 
      

  7.   

    自定义控件当然好,如果真想要的话,我写了一个,还能自适应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);
    }
    }
    }
      

  8.   

    jjcccc:是<win:NumberTextBox ID="MyCounter"  RunAt="server" />调用吗??
    我运行时提示脚本错误,怎么回事阿?
      

  9.   

    编译好后,把编译好的dll拷贝到你的应用程序的bin目录下,如何在vs.net的工具箱中-自定义工具箱和项目的引用中加入刚才的dll,然后向.net自己的web控件一样使用(拖到form上,vs.net 自动会生成<@Register ...>和实际标记的(默认一般是类似与:cc1:NumberTextBox ....)
      

  10.   

    如何在vs.net的工具箱中---》然后在vs.net的工具箱中.....
      

  11.   

    jjcccc:问题肯定出在script脚本上,我的调用方法没有问题。我调用该控件的页面可以查看到输入框,并且也可输入,但是我却可以输入字符串……
      

  12.   

    jjcccc:而且网页的左下角还有IE错误的提示……
      

  13.   

    可能,我可没有实际测试,只是写一个例子供你参考。你看看Ie里的原文件和错误,检查改一下控件里script脚本。我也看看
      

  14.   

    对不起,因为没有测试,小错误还不少,下面是经过完全测试过的:
    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);
    }
    }
    }
      

  15.   

    还有,上面的针对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>";