Вызов Javascript из библиотеки классов

Я создал 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

person DesignStudio    schedule 20.03.2011    source источник


Ответы (2)


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

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

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

Изменить: вот синтаксис VB:

Dim page As Page = HttpContext.Current.Handler
page.ClientScript.RegisterClientScriptBlock(...)
person Shadow Wizard Wearing Mask V2    schedule 20.03.2011
comment
Большое спасибо Shadow Wizard, это то, что я искал, и вот как это делается в VB.NET для всех, кто в нем нуждается: Dim page As Page = HttpContext.Current.Handler page.ClientScript.RegisterClientScriptBlock (...) - person DesignStudio; 20.03.2011
comment
Приветствую @Des рад, что смог помочь! :-) - person Shadow Wizard Wearing Mask V2; 20.03.2011
comment
Привет, Shadow Wizard, сообщение об ошибке исчезло, но javascript ВСЕ ЕЩЕ написан в верхней части указанной страницы. Есть ли способ записать это внутри тега заголовка или тега тела страницы ?? - person DesignStudio; 20.03.2011
comment
@Des - Эта перегрузка: msdn.microsoft.com/en-us/library/ bahh2fef.aspx принимает логическое значение в качестве последнего аргумента, передает ему True, и ASP.NET должен добавить <script> теги вокруг кода и разместить его в нужном месте. - person Shadow Wizard Wearing Mask V2; 20.03.2011
comment
@Shadow Wizard - по-прежнему пишет JavaScript вверху страницы с тегами ‹script› вокруг кода. - person DesignStudio; 20.03.2011
comment
@Des, это действительно странно. Можете ли вы опубликовать пример кода, вызывающего такое? - person Shadow Wizard Wearing Mask V2; 20.03.2011
comment
Будет ли текстовое поле комментария содержать образец кода ?? Или мне следует щелкнуть «Ответить на вопрос Йопура» и опубликовать его там. - person DesignStudio; 20.03.2011
comment
@Des - Отредактируйте исходный вопрос с помощью кода, он также имеет отношение к самому вопросу. :) - person Shadow Wizard Wearing Mask V2; 20.03.2011

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

person anurag_it    schedule 11.03.2013