我在<body>
:中有一个带有此标记的aspx页面
<asp:ScriptManager ID="scriptManager1" runat="server" />
现在在aspx页面的其他地方,我有一些VB代码(使用<% %>
嵌入在页面中,而不是嵌入在代码隐藏的VB文件中(:
scriptManager1.RegisterClientScriptBlock(Me.GetType(), "mandatoryAdditionalFieldRules_ContactType", tempStr)
问题是,我在那一行得到一个编译错误,说scriptManager1没有声明。我以为runat="server"
的所有控件都可以在代码中访问?为什么不起作用?
编辑:
哦,我想明白了——有点。由于某种原因,RegisterClientScriptBlock
是ScriptManager
的共享方法,所以我需要这样称呼它:
ScriptManager.RegisterClientScriptBlock(Me.GetType(), "mandatoryAdditionalFieldRules_ContactType", tempStr)
将其作为实例方法调用是不起作用的。
然而,现在我收到一个错误,说ScriptManager类本身不存在!我引用了页面顶部的适当名称空间:
<%@ Import Namespace="System.Web.UI" %>
为什么找不到ScriptManager?如果我通过名称空间显式引用类,我甚至会得到一个错误:
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Me.GetType(), "mandatoryAdditionalFieldRules_ContactType", tempStr)
编辑:这是一个简单的页面,应该会重现错误:
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="UTF-8" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.IO" %>
<html>
<head>
<title>FRED</title>
</head>
<body>
<asp:ScriptManager ID="scriptManager1" runat="server" />
<%
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Me.GetType(), "mandatoryAdditionalFieldRules_ContactType", "alert('fred');")
%>
</body>
</html>
编辑:按照建议尝试,相同错误:
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="UTF-8" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.IO" %>
<script runat="server">
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Me.GetType(), "mandatoryAdditionalFieldRules_ContactType", "alert('fred');")
End Sub
</script>
<html>
<head>
<title>FRED</title>
</head>
<body>
<asp:ScriptManager ID="scriptManager1" runat="server" />
</body>
</html>
根据您试图在方法调用中使用的参数,看起来有点像您混合了两个独立的类:
System.Web.UI.ScriptManager
System.Web.UI.ScriptManager文档链接
和
System.Web.UI.ClientScriptManager
System.Web.UI.ClientScriptManager文档链接
这两个中的第一个存在于System.Web.Extensions.dll
组件中。是否已检查是否引用了此程序集?
第二个是通过Page
类上的ClientScript
属性公开的。我认为应该这样做(注意C#语法,应该很容易更改为VB(:
<%
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "mandatoryAdditionalFieldRules_ContactType", "alert('fred');");
%>
在这里检查这个例子,看起来你可能需要在Page_PreRender中调用它——这个例子是在C#而不是VB中,但前提应该是相同的。https://learn.microsoft.com/en-us/dotnet/api/system.web.ui.scriptmanager.registerclientscriptblock?view=netframework-4.8
我用Page_PreRender中的调用获取了您的样本,并进行了一些调整(RegisterClientScriptBlock的不同参数,在脚本管理器周围放置了一个带有runat=server的表单(,我就可以让它为我工作了。
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="UTF-8" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.IO" %>
<script runat="server">
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender
System.Web.UI.ScriptManager.RegisterClientScriptBlock(scriptManager1, Me.GetType(), "mandatoryAdditionalFieldRules_ContactType", "alert('fred');", True)
End Sub
</script>
<html>
<head>
<title>FRED</title>
</head>
<body>
<form runat="server">
<asp:ScriptManager ID="scriptManager1" runat="server" />
</form>
</body>
</html>
我不知道为什么RegisterClientScriptBlock的参数不同,所以我想知道.NET版本是否有差异?尽管如此,希望这能有所帮助。