不能像方法一样使用非可调用成员'System.Web.UI.Page.ClientScript'



非可调用成员'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);
}

最新更新