asp.net webform:RegisterClientScriptBlock 不适用于 jquery

Posted

技术标签:

【中文标题】asp.net webform:RegisterClientScriptBlock 不适用于 jquery【英文标题】:asp.net webform : RegisterClientScriptBlock not working with jquery 【发布时间】:2021-08-27 16:50:35 【问题描述】:

我在 asp.net 中的 RegisterClientScriptBlock 方法有问题。

我用这个代码

ScriptManager.RegisterClientScriptBlock(this, GetType(), "closeFilt", ";$(function()$('#filters-container').slideUp(); );", true);

但什么也没发生,在控制台中我看到jQuery is not defined

它在页脚之前渲染脚本块,当然它不起作用......

有什么方法可以让它工作吗??

我找到了解决办法

ScriptManager.RegisterClientScriptBlock(this, GetType(), "closeFilt", "var closeFilt = setInterval(function()$('#filters-container').slideUp(); clearInterval(closeFilt),300);", true);

它可以工作,但它很难看,我正在寻找更好的解决方案......有什么建议吗?

【问题讨论】:

第一个版本的开头多了一个分号。这有影响吗?两者的写法略有不同。从第一个删除;$? (或者只是;?) @wazz 分号没有效果,$ 是函数的强制要求...我的问题是它在 jquery 初始化之前渲染脚本 【参考方案1】:

希望对你有用。

这是我命令调用 RegisterStartupScript 函数的方式。

首先,我使用了一个扩展方法:

public static class Extensions

    public static void RunScript(this Page _page, String _script)
    
        String function = @"<script type='text/javascript'> $(function ()  " + _script + " ); </script>";
        _page.ClientScript.RegisterStartupScript(_page.GetType(), Key.GetNewKey(), function, false);
    


public static class Key

    public static String GetNewKey()
    
        String _string_key = String.Empty;
        Guid _guid = Guid.NewGuid();
        foreach (char _char in Convert.ToBase64String(_guid.ToByteArray()))
        
            _string_key += char.IsLetterOrDigit(_char) ? _char.ToString() : string.Empty;
        
        return _string_key;
    

那么,我就是这样调用函数的:

this.RunScript("alert('Hello world')");

如有任何问题,请告诉我。

【讨论】:

主要区别在于 RegisterStartupScript 方法将 JavaScript 放置在 ASP.NET 页面底部的 结束元素之前。 RegisterClientScriptBlock 方法将 JavaScript 直接放在页面中打开的
元素之后。
codeproject.com/Articles/667538/… 这个方法不错,但是还是不行,问题是它在jquery初始化之前渲染脚本并返回Uncaught ReferenceError: $ is not defined 好吧,我使用一个包来加载我所有的脚本和 css 依赖项,您使用什么或如何加载您的依赖项? 我只是在页脚添加一个脚本标签

以上是关于asp.net webform:RegisterClientScriptBlock 不适用于 jquery的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一个 Visual Studio 解决方案中设置 ASP Classic 和 ASP.NET WebForm - 用于在 ASP.NET WebForm 中重写 ASP Classic 页面

ASP.NET WebForm项目结构

ASP.NET WebForm / MVC 源码分析

Asp.net: WebForm基础上构建Mvc的方法

ASP.NET WebForm的优缺点

从 ASP.NET WebForms 迁移到 ASP.NET MVC 的建议?