【问题标题】:ASP.NET how to call clientscript from public static methodASP.NET 如何从公共静态方法调用客户端脚本
【发布时间】:2012-02-10 06:48:27
【问题描述】:

我将在公共静态方法中使用以下 ClientScript 函数(VS2010,C#),但它给了我一些错误(我想将它用于带有“_parent”目标的响应重定向

                ClientScript.RegisterStartupScript(GetType(), "Load", "<script type='text/javascript'>window.parent.location.href = '" + a + "'; </script>");

Error   37  An object reference is required for the non-static field, method, or property 'System.Web.UI.Page.ClientScript.get' 

Error   38  An object reference is required for the non-static field, method, or property 'object.GetType()'    

谢谢

【问题讨论】:

    标签: asp.net static-methods


    【解决方案1】:

    您不能在 static methods(基本上是任何实例)中使用实例属性 (ClientScript) 或方法 (GetType())。

    删除 static 关键字,它应该可以工作:

    public void SomeMethod()
    {
         ClientScript.RegisterSomeScript("Load", 
            "<script>....</script>");
    }
    

    评论后编辑:

    或者,如果您需要静态类中的方法是静态的,则将 Page 对象作为参数传递:

    public static class ScriptRegistar
    {
        public static void RegisterSomeScript(Page page)
        {
             page.ClientScript.RegisterStartupScript("Load", 
            "<script>.........</script>");
        }
    }
    

    用法(在页面代码隐藏内):

    public void Page_Load(Object sender, EventArgs e)
    {
         ScriptRegistar.RegisterSomeScript(this);
    }
    

    旁注:ClientScript.RegisterStartupScript 有两个参数:脚本的密钥和脚本文本,因此这里不需要GetType()

    【讨论】:

    • 哦,感谢您的描述,但我怎样才能将(页面)传递给我的函数?我将在一个公共静态类中定义一个公共静态函数,它可以在所有文件中全局访问,那么如何将页面对象从其他文件传递给这个函数呢?
    • 可以这样调用函数吗:._Default.MyUtilityFunctions.LogoutUser(Page);?我的公共静态类是 MyUtilityFunctions,它是在 Default.aspx.cs 文件中定义的,它没有给我任何错误,所以我可以依赖它吗?
    • 这个解决方案帮助了我。谢谢:-)
    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多