快速业务通道

ASP.NET服务器控件PleaseWaitButton

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
  OnClick="PleaseWaitButton1_Click" />
       <asp:Panel id="panelSuccess" runat="server"
            visible="false">
         Thank you for submitting this form. You are truly
         the coolest user I''ve ever had the pleasure of serving.
         No, really, I mean it. There have been others, sure,
         but you are really in a class by yourself. 
       </asp:Panel>
     </form>
   </body>
</html>

How It Works

PleaseWaitButton控件在<div>标记中呈现了一个标准的asp.net Button。它也呈现了一个空的<div>标记给

信息/图像。在点击按钮时,由Javascript函数(见下面的客户端函数)控制按钮的隐藏和信息的显示。为了方便起见,由PleaseWaitButton服务器控件处理所有必需的javascript客户端代码的实施。

由于PleaseWaitButton实施它自己的javascript onclick句柄,所以我们必须采取一些额外的措施来保持原有的onclick句柄,并且允许控件清晰地运行一些客户端验证代码。为了达到此目的,我们首先把Button基类还原为一个字符串缓冲,然后巧妙地处理它,把我们定义的onclick代码包含进去。

protected override void Render(HtmlTextWriter output)
{
   // Output the button''s html (with attributes)
   // to a dummy HtmlTextWriter
   StringWriter sw = new StringWriter();
   HtmlTextWriter wr = new HtmlTextWriter(sw);
   base.Render(wr);
   string sButtonHtml = sw.ToString();
   wr.Close();
   sw.Close();
   // now modify the code to include an "onclick" handler
   // with our PleaseWait() function called appropriately
   // after any client-side validation.
   sButtonHtml = ModifyJavaScriptOnClick(sButtonHtml);
   // before rendering the button, output an empty <div>
   // that will be populated client-side via javascript
   // with a "please wait" message"
   output.Write(string.Format("<div id=''pleaseWaitButtonDiv2_{0}''>",
                 this.ClientID));
   output.Write("</div>");

   // render the button in an encapsulating <div> tag of its own
   output.Write(string.Format("<div id=''pleaseWaitButtonDiv_{0}''>",
                 this.ClientID));
   output.Write(sButtonHtml);
   output.Write("</div>");
}

这种把button还原成一个字符串缓冲然后处理它的onclick内容的技术是一件很危险的事情(is certainly a hack). 但它可以让我们在父button类中实施标准的验证代码,然后再实现我们的PleaseWait() Javascript函数调用。如果不这样做,我们只能在验证代码之前就在onclick属性中实施我们的PleaseWait()函数调用,除非我们愿意完全重写父Button类的属性的呈现。这样就算页面上有输入错误也会产生我们并不希望的按钮隐藏和显示"please wait"信息的效果。因此,我们必须在onclick句柄中强行令我们的客户端PleaseWait()函数出现在客户端页面验证之后。

onclick属性的修改发生在ModifyJavaScriptOnClick()函数中。这个函数获取按钮呈现的HTML字符串,并检查看是否存在onclick属性。如果是,这个函数会检查是否有使用客户端验证代码。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号