none
OnClientClick验证问题 RRS feed

  • 问题

  • OnClientClick="return Address_Validate();" 中的Address_Validate() 方法并没有返回true or false,为什么不加return,提交后就会刷新页面呢?
    • 已移动 Min Zhu 2011年9月20日 6:36 (发件人:.NET Framework 一般性问题讨论区)
    2011年9月17日 10:13

答案

  • 但是Address_Validate() 中并没有返回true 或false呀


    我反射观察了Button的代码,其中注意到:

    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        if (base.Page != null)
        {
            base.Page.VerifyRenderingInServerForm(this);
        }
        if (this.UseSubmitBehavior)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
        }
        else
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
        }
        PostBackOptions postBackOptions = this.GetPostBackOptions();
        string uniqueID = base.UniqueID;
        if (uniqueID != null)
        {
            if (postBackOptions == null || postBackOptions.TargetControl == this)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Name, uniqueID);
            }
        }
        writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
        string empty = string.Empty;
        if (base.IsEnabled)
        {
            empty = Util.EnsureEndWithSemiColon(this.OnClientClick);
           ……………………

    注意黑色的一句话,明显它是向页面输出存储在ClientClick的语句。你应该知道,任何asp.net控件render到页面都是纯的html(button变成<input type="submit"……/>因此,这个并不是asp.net的server端问题。严格而言是客户端问题——如果return是false的话,那么submit不会提交页面,不提交页面也就不会引发RaisePostBackEvent 一系列事件了。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年9月23日 8:22

全部回复

  • OnClientClick="return Address_Validate();" 中的Address_Validate() 方法并没有返回true or false,为什么不加return,提交后就会刷新页面呢?

    一个标准的ASP.NET程序总是先启动OnClientClick,这只是执行js代码段。如果有true和false,那么控件自动根据true和false的返回值判断是否继续执行服务器端代码;如果没有return,那么只是纯粹执行一段客户端js之后,再去执行服务端代码而已。
    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年9月18日 3:04
  • 页面刷新说明已经PostBack了, 如果return 的值是false , 则不会刷新!
    2011年9月21日 10:08
    版主
  • OnClientClick里面是一个事件处理器函数,根据,他是根据返回的值来决定是否终止下面的操作的,所以,return false,就终止后续的操作,也就是不进行提交了,不提交,也就不会刷新页面了

    【孟子E章】
    2011年9月22日 1:05
    版主
  • 但是Address_Validate() 中并没有返回true 或false呀
    2011年9月23日 8:14
  • 但是Address_Validate() 中并没有返回true 或false呀


    我反射观察了Button的代码,其中注意到:

    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        if (base.Page != null)
        {
            base.Page.VerifyRenderingInServerForm(this);
        }
        if (this.UseSubmitBehavior)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
        }
        else
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
        }
        PostBackOptions postBackOptions = this.GetPostBackOptions();
        string uniqueID = base.UniqueID;
        if (uniqueID != null)
        {
            if (postBackOptions == null || postBackOptions.TargetControl == this)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Name, uniqueID);
            }
        }
        writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
        string empty = string.Empty;
        if (base.IsEnabled)
        {
            empty = Util.EnsureEndWithSemiColon(this.OnClientClick);
           ……………………

    注意黑色的一句话,明显它是向页面输出存储在ClientClick的语句。你应该知道,任何asp.net控件render到页面都是纯的html(button变成<input type="submit"……/>因此,这个并不是asp.net的server端问题。严格而言是客户端问题——如果return是false的话,那么submit不会提交页面,不提交页面也就不会引发RaisePostBackEvent 一系列事件了。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年9月23日 8:22