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

Non-invocable member 'System.Web.UI.Page.ClientScript' cannot be used like a method

不可调用成员'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' 在当前上下文中不存在

然后我查看了 This 问题,发现您可以像 Page.ClientScript 一样使用它,但现在我收到错误不可调用成员

Page.ClientScript是一个属性,不能像方法一样使用。可能您正在寻找 Page.ClientScript.RegisterClientScriptBlock() 将脚本内容包含到页面正文中,参考问题 link.

中的另一个答案对此进行了解释

假设你正在处理 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);
    }