非可调用成员'System.Web.UI.Page.ClientScript'不能用作方法。
我正在尝试在单击时冻结按钮,以便用户不会双击意外导致重复实体。这是我的代码:
private void FreezeButton()
{
var sb = new StringBuilder();
sb.Append("if (typeof(Page_ClientValidate) == 'function') { ");
sb.Append("var oldPage_IsValid = Page_IsValid; var oldPage_BlockSubmit = Page_BlockSubmit;");
sb.Append("if (Page_ClientValidate('" + btnAdd.ValidationGroup + "') == false) {");
sb.Append(" Page_IsValid = oldPage_IsValid; Page_BlockSubmit = oldPage_BlockSubmit; return false; }} ");
sb.Append("this.value = 'Processing...';");
sb.Append("this.disabled = true;");
sb.Append(Page.ClientScript(btnAdd, null) + ";");
sb.Append("return true;");
string submitButton = sb.ToString();
btnAdd.Attributes.Add("onclick", submitButton);
}
首先,我尝试在没有Page.ClientScript的情况下使用客户端,它给了我错误:当前上下文中不存在名称'ClientScript'
然后我看了这个问题,发现你可以像Page.ClientScript一样使用它,但现在我得到了错误非可调用成员
Page.ClientScript
是一个属性,你不能像使用方法一样使用它。可能您正在寻找将脚本内容包含在页面正文中的Page.ClientScript.RegisterClientScriptBlock()
,这在引用的问题链接中的另一个答案中得到了解释。
假设您正在处理btnAdd
这是一个具有FreezeButton
方法事件处理的服务器控件,您应该替换包含RegisterClientScriptBlock
的内容和 JS 函数名称以调用客户端验证,如以下示例所示:
protected void FreezeButton(object sender, EventArgs e)
{
var sb = new StringBuilder();
sb.Append("function validate() { ")
// script content here, skipped for brevity
sb.Append("}");
// use RegisterClientScriptBlock to attach script content into <script> tag inside page body
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Example", sb.ToString(), true);
// handle client-side event click if the button is a server control
btnAdd.OnClientClick = "validate()";
}
然后,像这样处理btnAdd
的服务器端单击事件:
<asp:Button ID="btnAdd" runat="server" OnClick="FreezeButton" ... />
我找到了解决方案:
private void FreezeButton()
{
var sb = new StringBuilder();
sb.Append("if (typeof(Page_ClientValidate) == 'function') { ");
sb.Append("var oldPage_IsValid = Page_IsValid; var oldPage_BlockSubmit = Page_BlockSubmit;");
sb.Append("if (Page_ClientValidate('" + btnAdd.ValidationGroup + "') == false) {");
sb.Append(" Page_IsValid = oldPage_IsValid; Page_BlockSubmit = oldPage_BlockSubmit; return false; }} ");
sb.Append("this.value = 'Processing...';");
sb.Append("this.disabled = true;");
sb.Append(Page.ClientScript.GetPostBackEventReference(btnAdd, null) + ";");
sb.Append("return true;");
string submitButtonOnclickJs = sb.ToString();
btnAddReceipt.Attributes.Add("onclick", submitButtonOnclickJs);
}