0

不可调用的成员“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 一样使用它,但现在我得到了 Error Non-invocable 成员

4

2 回答 2

1

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" ... />
于 2018-10-01T03:59:30.367 回答
0

我找到了解决方案:

  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);
    }
于 2018-10-01T18:52:24.067 回答