0

嘿,我在这里有这段代码:

ScriptManager.RegisterClientScriptBlock(Me.Page, GetType(String), "showNotifier", ";$(function() {showNotifier(3000,'#cf5050','" & msg & "');});", True)

我想像这样放在一个类文件中:

Public Class topMsgNotifyer
   Public Shared Sub show(ByVal delay As Integer, ByVal colorOfBox As String, ByVal message As String)
      Try
          ScriptManager.RegisterClientScriptBlock(Me.Page, GetType(String), "showNotifier", ";$(function() {showNotifier(" & delay & ",'" & colorOfBox & "','" & message & "');});", True)
      Catch ex As Exception
      End Try
   End Sub
End Class

当然,类文件中的 Me.Page 也有问题。

我可以通过以下方式获取当前页面名称:

Dim pageName = Path.GetFileName(Request.Path)

从 asp.net 页面调用该类子而不是在页面本身上调用它时,我该如何纠正这个问题?

4

3 回答 3

2

您可以将 Page 对象传递给您的 show() 方法,但是,更好的方法是创建一个作为 BasePage 类的类,您的页面从该类继承。在那个类中,让你使用 show() 方法。因此,继承此 BasePage 的每个页面都可以访问该方法,并且 Me.Page 将可用。

传递 Page 对象:

Public Class topMsgNotifyer
   Public Shared Sub show(ByVal delay As Integer, ByVal colorOfBox As String, ByVal message As String, ByVal page as System.Web.UI.Page)
      Try
          ScriptManager.RegisterClientScriptBlock(page, GetType(String), "showNotifier", ";$(function() {showNotifier(" & delay & ",'" & colorOfBox & "','" & message & "');});", True)
      Catch ex As Exception
      End Try
   End Sub
End Class

称它为:

topMsgNotifyer.show(30, "Red", "You did something wrong", Me.Page)
于 2012-08-17T17:05:21.917 回答
1

这些事情通常在可以访问页面的用户控件中完成。

另一种选择是将 Page 变量作为参数传递给函数。
或者让您的函数使用脚本返回一个字符串,然后像您正在做的那样调用 RegisterClientScriptBlock。

于 2012-08-17T17:20:12.967 回答
1

为什么人们说不要传递页面实例?我认为这没有错:

public static void clientOnLoadScript(System.Web.UI.Page instance, string script, bool addScriptTag = false)
{ 
    string toWrite = "$(window).load(function () { \n" + script + "\n });";

    instance.ClientScript.RegisterStartupScript(instance.GetType(),"OnLoad", toWrite,addScriptTag);
}

然后只需调用该函数:

clientOnLoadScript(this,"script",true);

这对我有用。祝你好运。

于 2012-08-17T17:41:55.717 回答