使用自定义Web服务器控件的ClickOnce按钮服务器控件

分享于 

4分钟阅读

Web开发

  繁體

clickonce按钮

介绍

当服务器执行长时间的过程时,阻止大多数( 并非全部) 用户单击,并作为自定义Web服务器控件分发。

背景

自引入自定义Web服务器控件之后,在现有控件之上开发一个控件比. NET 1.1的时间快。

使用代码

在自定义Web服务器控件诞生之前,CodeProject很少有人想到如何做到这一点 hard。 现在与以前比较容易。 ( 我的代码的一部分也是从他们那里提取出来的;

首先,右键单击解决方案,然后添加"ASP.NET 服务器控件"项目"。

asp.net 服务器控件

重命名类,并将自定义控件的inherit 从现有的ASP Button 中设置为如下所示:

// Your control will inherit from existing ASP Buttonpublicclass ClickOnceBtn : System.Web.UI.WebControls.Button

在这里提供有意义的NAME,这将是在工具箱中显示的NAME:

asp.net 服务器控件

重写 OnPreRender() 作为 below。它的作用是:

  • onClick 事件标记为自定义Web服务器控件的属性的一部分
  • register 嵌入的函数,稍后将显示
protectedoverridevoid OnPreRender(EventArgs e)
{
 this.UseSubmitBehavior = false;
 this.Attributes.Add("onclick", "javascript:clickOnce(this)");
 // Define the name and type of the client script on the page.String csName = "ButtonClickScript";
 Type cstype = this.GetType();
 // Get a ClientScriptManager reference from the Page class. ClientScriptManager cs = Page.ClientScript;
 // Check to see if the client script is already registered.if (!cs.IsClientScriptBlockRegistered(cstype, csName))
 {
 string[] names = this.GetType().Assembly.GetManifestResourceNames();
 if (names.Length >0)
 {
 // Write out the web resource url. Assembly assembly = this.GetType().Assembly;
 conststring JAVASCRIPT_RESOURCE = ".disable.js";
 Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream(
 assembly.GetName().Name + JAVASCRIPT_RESOURCE);
 StreamReader sr = new StreamReader(st);
 this.Page.ClientScript.RegisterClientScriptBlock(
 this.GetType(), csName, sr.ReadToEnd(), true);
 }
 }
 base.OnPreRender(e);
}

然后又调用这里 JavaScript:

function clickOnce(btn, msg) {
 // Test if we are doing a validationif (typeof (Page_ClientValidate) == 'function') {
 // if we are doing a validation, return if it's falseif (Page_ClientValidate() == false) { returnfalse; }
 }
 // Ensure that the button is not of type"submit"if (btn.getAttribute('type') == 'button') {
 // The msg attibute is absolutely optional// msg will be the text of the button while it's disabledif (!msg || (msg = 'undefined')) { msg = 'Loading...'; }
 btn.value = msg;
 btn.disabled = true;
 }
 returntrue;
}

记住将 。js文件设置为嵌入资源。 我们不希望主机文件传送到许多单独的文件,只有一个 DLL。

嵌入式资源

是的就这么简单?

现在我们创建一个测试harness网页,并将定制的Web服务器控件添加到主机文件。

asp.net 服务器控件

如果要在主机页面上进行一些客户端验证,在调用自定义Web服务器控件之前,脚本将类似:

客户端验证

其中 confirmProceed() 为:

function confirmProceed() {
 var r = confirm("Confirm to proceed?");
 if (r == false) {
 return false;
 }
 return true;
}

Points of Interest

如果ASP页面包含某些确认器,则可能会影响页面验证;请尝试使用这里功能:

// Test if we are doing a validationif (typeof (Page_ClientValidate) == 'function') {
 // if we are doing a validation, return if it's falseif (Page_ClientValidate() == false) { returnfalse; }
}

历史记录

如果有的话。


WEB  Server  控制  按钮  点击  control-c  
相关文章