[JavaScript]自定义MessageBox续-全面分析PostBack之Client Script

简介:

全面分析PostBack之Client Script


 -Written by 浪子@cnblogs.com (2006.08.14)

问题描述:

 

   继上文[JavaScript]自定义MessageBox ,我还剩下一个问题没有解决,即"如何获取control的完整的客户端代码"?。所以本文解决的问题只涉及PostBack的客户端Script,而不涉及服务端的PostBack机制如何运作。

 

问题分析:

  

   PostBack有2种方式

1、  通过__doPostBack(eventTarget, eventArgument),例如LinkButton;

2、  通过form的submit方式,例如采用UseSubmitBehaviorButton

   

   对于button,可能会有三种绘制方式:

1、  button的UseSubmitBehavior为true,并且没有触发验证事件;

采用form的submit方式,不需要描绘script

2、  button的UserSubmitBehavior为false,并且没有触发验证事件;

采用__doPostBack函数

3、  button有触发验证事件:

采用WebForm_DoPostBackWithOptions(options)函数


function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)  {
     this.eventTarget = eventTarget;
     this.eventArgument = eventArgument;
     this.validation = validation;
     this.validationGroup = validationGroup;
     this.actionUrl = actionUrl;
     this.trackFocus = trackFocus;
     this.clientSubmit = clientSubmit;
}
 
function WebForm_DoPostBackWithOptions(options)  {
     var validationResult =  true;
     if (options.validation)  {
         if ( typeof(Page_ClientValidate) == ' function')  {
            validationResult = Page_ClientValidate(options.validationGroup);
        }
    }

     if (validationResult)  {
         if (( typeof(options.actionUrl) != "undefined") && (options.actionUrl !=  null) && (options.actionUrl.length > 0))  {
            theForm.action = options.actionUrl;
        }
         if (options.trackFocus)  {
             var lastFocus = theForm.elements["__LASTFOCUS"];
             if (( typeof(lastFocus) != "undefined") && (lastFocus !=  null))  {
                 if ( typeof(document.activeElement) == "undefined")  {
                    lastFocus.value = options.eventTarget;
                }
                 else  {
                     var active = document.activeElement;
                     if (( typeof(active) != "undefined") && (active !=  null))  {
                         if (( typeof(active.id) != "undefined") && (active.id !=  null) && (active.id.length > 0))  {
                            lastFocus.value = active.id;
                        }
                         else  if ( typeof(active.name) != "undefined")  {
                            lastFocus.value = active.name;
                        }
                    }
                }
            }
        }
    }

     if (options.clientSubmit)  {
        __doPostBack(options.eventTarget, options.eventArgument);
    }
}



 

 

 

问题解决:

 

   我需要的是采集PostBack的Client Script,所以只需要获取__doPostBack或者WebForm_DoPostBackWithOptions(options)函数,以便传给KMessageBox进行事件挂载。

 

   按上面的分析我们已经知道什么情况下使用__doPostBack,什么情况下使用WebForm_DoPostBackWithOptions(options)。

  分析一下Reflector出来的Button源码:
 

OnPreRender

    有了这段代码,我们就可以很清晰的得到服务端如何决定采取什么方式来绘制客户端的PostBack Script了

DoPostBackWithOptions

   
IButtonControl button = (IButtonControl)control;

                     if ((button.CausesValidation && ( this.Page.GetValidators(button.ValidationGroup).Count > 0)) || ! string.IsNullOrEmpty(button.PostBackUrl))
                     {
                        strOnClickScript =  string.Format(gDoPostBackWithOptions, control.ClientID, button.CommandArgument, button.CausesValidation.ToString().ToLower(), button.ValidationGroup, button.PostBackUrl, "false", "true");
                    }
                     else
                     {
                        strOnClickScript = Page.ClientScript.GetPostBackEventReference(control, button.CommandArgument);
                    }


     至此KMessageBox服务端的封装工作全部结束。做到,不影响原来的编码方式,只需要简单的执行一下KMessageBox的RegisterConfrim函数为control注册一下客户端事件就搞定一切。

分类: 1.首页原创精华.NET区123,JavaScript/CSS



本文转自浪子博客园博客,原文链接:http://www.cnblogs.com/walkingboy/archive/2006/08/14/PostBack_ClientScript.html,如需转载请自行联系原作者

相关文章
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
Vue.js与Angular的优劣分析
Vue.js和Angular都是非常流行的JavaScript框架,它们在构建现代Web应用程序方面各有优劣
136 64
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
|
4月前
|
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
84 3
JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择
本文深入探讨了JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择。JavaScript以其灵活性和广泛的生态支持著称,而TypeScript通过引入静态类型系统,提高了代码的可靠性和可维护性,特别适合大型项目。文章还讨论了结合使用两种语言的优势,以及如何根据项目需求和技术背景做出最佳选择。
118 4
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
139 4
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
582 9
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
121 1
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
145 1

热门文章

最新文章