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 页面