【问题标题】:Non-invocable member 'System.Web.UI.Page.ClientScript' cannot be used like a method不可调用的成员“System.Web.UI.Page.ClientScript”不能像方法一样使用
【发布时间】:2018-09-28 15:23:29
【问题描述】:

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

【问题讨论】:

  • It's a property, not a method - “获取用于管理、注册和添加脚本到页面的 ClientScriptManager 对象。”
  • @stuartd 我明白了,还有其他方法吗?我需要能够将此效果应用于此按钮。

标签: c# asp.net clientscript


【解决方案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" ... />

【讨论】:

  • 感谢您的信息,并且由于我从您的回答中得到的提示,我能够找到解决方案。
【解决方案2】:

我找到了解决办法:

  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);
    }

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2016-05-01
    • 2016-04-11
    • 2018-05-31
    • 1970-01-01
    相关资源
    最近更新 更多