Вызов Javascript из библиотеки классов - PullRequest
2 голосов
/ 20 марта 2011

Я создал библиотеку DLL библиотеки классов, на которую можно ссылаться из любого стороннего приложения, и она содержит только одну функцию, которая вызывает JavaScript для чтения локального файла и возвращает некоторые значения из файла в приложение-ссылку.

  1. Я использовал: System.Web.HttpContext.Current.Response.Write
    , но он записывает функцию JavaScript в начале ссылочной страницы, поэтому ее невозможно выполнить.

  2. Затем,чтобы написать JavaScript в конце ссылочной страницы, которую я использовал: Dim CSM As UI.ClientScriptManager = System.Web.UI.Page.ClientScript
    и я также использовал:

    Me.Page.ClientScript CSM.RegisterClientScriptBlock(Me.GetType(), "SCRIPTNAME", JavaScriptSuntax.ToString)

    И это показывает сообщение об ошибке: Ссылка нанезарегистрированному члену требуется общая ссылка.

  3. Я пытался: ScriptManager.RegisterStartupScript("", Me.GetType(), "SCRIPTNAME", JavaScriptSuntax.ToString)
    , но он выдал сообщение об ошибке: Имя «ScriptManager» не объявлено.

Я добавляю ссылки на следующее:

System.Web, System.Web.UI, System.Web.UI.ClientScriptManager, System.Web.UI.Page,System.Text

Как я могу вызвать JavaScript из библиотеки классов DLL будет правильно выполняться из любого ссылочного приложения asp.net ??

Спасибо за помощь заранее.

Пример кода:

** Correction now it writes the JavaScript in the body tag but for some reason it doesn't work!!!  

'Function in Class Library DLL  
Function ReadClientFile() As Boolean  
Try  
Dim JavaScriptSuntax As StringBuilder = New StringBuilder()  
JavaScriptSuntax.Append(" var FSO = new ActiveXObject('Scripting.FileSystemObject');")  
JavaScriptSuntax.Append(" var nForReading=1;")  
JavaScriptSuntax.Append(" var fileLines;")  
JavaScriptSuntax.Append(" var OldKeyLine;")  
JavaScriptSuntax.Append(" var NewKeyLine;")  
JavaScriptSuntax.Append(" var oFileObj = FSO.OpenTextFile('D:\TestJScript.txt',nForReading, false);")
JavaScriptSuntax.Append(" var sFileContents=oFileObj.ReadAll();")  
JavaScriptSuntax.Append(" fileLines = sFileContents.split('\n');")  
JavaScriptSuntax.Append(" for(var intMissed = 0; intMissed < fileLines.length; intMissed++)")  
JavaScriptSuntax.Append(" {")  
JavaScriptSuntax.Append(" var myRegExp = /Doc_|_New/;")  
JavaScriptSuntax.Append(" var string1 = fileLines[intMissed];")  
JavaScriptSuntax.Append(" var matchPos1 = string1.search(myRegExp);")  
JavaScriptSuntax.Append(" if(matchPos1 != -1)")  
JavaScriptSuntax.Append(" {")  
JavaScriptSuntax.Append(" NewKeyLine = sFileContents.split(' = ');")  
JavaScriptSuntax.Append(" if(NewKeyLine[1].trim == '')")  
JavaScriptSuntax.Append(" {")  
JavaScriptSuntax.Append(" alert('Doc Key has not been updated!');")  
JavaScriptSuntax.Append(" }")  
JavaScriptSuntax.Append(" Else")  
JavaScriptSuntax.Append(" {")  
JavaScriptSuntax.Append(" alert('Doc Key has been updated and the NewKey= ' + NewKeyLine[1]);")  
JavaScriptSuntax.Append(" }")  
JavaScriptSuntax.Append("}")  
JavaScriptSuntax.Append(" else")  
JavaScriptSuntax.Append(" {")  
JavaScriptSuntax.Append(" }")  
JavaScriptSuntax.Append(" }")  
JavaScriptSuntax.Append(" oFileObj.Close();")  

Dim page As Page = HttpContext.Current.Handler  
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "SCRIPTNAME", JavaScriptSuntax.ToString, True)  
Return True  
Catch ex As Exception  
   gstrErrorMsg = ex.Message  
   Return False  
End Try  
End Function  


' Button Click Function in referencing ASP.NET Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim IsDone As Boolean = DispCaller. ReadClientFile()
End Sub

Ответы [ 2 ]

1 голос
/ 11 марта 2013

Вы можете добавить ссылку System.Web.Extensions & System.Web.UI class в вашу библиотеку классов и получить привилегию Работать над ScriptManager.Функция RegisterClientStartUp, которая также может вызываться в панели обновления.

1 голос
/ 20 марта 2011

Вы можете получить экземпляр страницы из HttpContext следующим образом:

Page page = (Page)(HttpContext.Current.Handler);
page.ClientScript.RegisterClientScriptBlock(...);

Это C #, но его также легко преобразовать в VB.NET.

Редактировать: вот синтаксис VB:

Dim page As Page = HttpContext.Current.Handler
page.ClientScript.RegisterClientScriptBlock(...)
...