1. 程式人生 > >c#後臺呼叫前臺與js方法互調

c#後臺呼叫前臺與js方法互調

很多人都向在伺服器端呼叫客戶端的函式來操作,也就是在asp中呼叫javascript指令碼中已經定義好的指令碼函式。經過研究,發現了一些勉強的方法。

1. 用Response.Write方法寫入指令碼

比如在你單擊按鈕後,先操作資料庫,完了後顯示已經完成,可以在最後想呼叫的地方寫上
Response.Write("<script type='text/javascript'>alert();</script>");

這個方法有個缺陷就是不能呼叫指令碼檔案中的自定義的函式,只能呼叫內部函式,具體呼叫自定義的函式只能在Response.Write寫上函式定義,比如Response.Write("<script type='text/javascript'>function myfun(){...}</script>");

2.用ClientScript類動態新增指令碼

    用法如下:在想呼叫某個javascript指令碼函式的地方新增程式碼,注意要保證MyFun已經在指令碼檔案中定義過了。

    ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>MyFun();</script>");

這個方法比Response.Write更方便一些,可以直接呼叫指令碼檔案中的自定義函式。

3.普通的新增控制元件的Attributes屬性

對於普通按鈕就是:Button1.Attributes.Add("onclick","MyFun();");

只能在Onload中或類似於onload的初始化過程中新增才有效。而且是先執行指令碼函式,無法改變執行順序。

注意,以上所有方法中,後臺程式碼都不能有轉化當前頁的程式碼,比如Redirect等,要把轉頁程式碼放在腳本里面

問:

1.如何在JavaScript訪問C#函式?

2.如何在JavaScript訪問C#變數?

3.如何在C#中訪問JavaScript的已有變數?

4.如何在C#中訪問JavaScript函式?

問題1答案如下:

javaScript函式中執行C#程式碼中的函式:

方法一:1、首先建立一個按鈕,在後臺將呼叫或處理的內容寫入button_click中;

        2、在前臺寫一個js函式,內容為document.getElementById("btn1").click();

        3、在前臺或後臺呼叫js函式,激發click事件,等於訪問後臺c#函式;

方法二:1、函式宣告為public             

           後臺程式碼(把public改成protected也可以)

           public string ss()

           {

              return("a");

           }

        2、在html裡用 <%=fucntion()% >可以呼叫

           前臺指令碼

            <script language=javascript >

           var a = " <%=ss()% >";

           alert(a);

            </script >

方法三:1、 <script language="javascript" >

            <!--

           function __doPostBack(eventTarget, eventArgument)

           {

              var theForm = document.Form1;     //指runat=server的form

              theForm.__EVENTTARGET.value = eventTarget;

              theFrom.__EVENTARGUMENT.value = eventArgument;

              theForm.submit();

           }

           -- >

            </script >

            <input id="Button1" type="button" name="Button1" value="按鈕" onclick="javascript:__doPostBack( 'Button1 ', ' ')" >

方法四: <script language="javascript" >

function SubmitKeyClick()

{

    if (event.keyCode == 13)

    {

        event.cancelBubble = true;

        event.returnValue = false;

        document.all.FunName.value="你要呼叫的函式名";

        document.form[0].submit();

    }

}

</script >

<INPUT onkeypress="SubmitKeyClick()" id="aaa" type="text" >

<input type="hidden" name="FunName" > 〈!--用來儲存你要呼叫的函式 --〉

在.CS裡有:

public Page_OnLoad()

{

if (!Page.IsPost())

{

string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";

//根據傳回來的值決定呼叫哪個函式

switch(strFunName)

{

case "enter()":

enter() ; //呼叫該函式

break;

case "其他":

//呼叫其他函式

break;

default:

//呼叫預設函式

break;

}

}

}

public void enter()

{

//……比如計算某值

}

問題2.如何在JavaScript訪問C#變數?

答案如下:

方法一:1、通過頁面上隱藏域訪問 <input id="xx" type="hidden" runat="server" >

方法二:1、如後臺定義了PUBLIC STRING N;前臺js中引用該變數的格式為 ' <%=n% > '或"+ <%=n% >+"

方法三:1、或者你可以在伺服器端變數賦值後在頁面註冊一段指令碼

           " <script language= 'javascript ' >var temp=" + tmp + " </script >"

           tmp是後臺變數,然後js中可以直接訪問temp獲得值。

3.如何在C#中訪問JavaScript的已有變數?

答案如下:

方法一:1、前臺使用靜態文字控制元件隱藏域,將js變數值寫入其中;

        2、後臺用request["id"]來獲取值;

方法二:可以用cookie或session

4.如何在C#中訪問JavaScript函式?

答案如下:

c#程式碼中執行javaScript函式:

方法一:1、Page.RegisterStartupScript("ggg"," <script >SetVisible(1); </script >");

方法二:使用Literal類,然後

private void Button2_Click(object sender, System.EventArgs e)

{

 string str;

 str=" <script language= 'javascript ' >";

 str+="selectRange()";

 str+=" </script >";

 //Literal1.Visible=true;

 Literal1.Text=str;

}

1.後臺方法:

protected string CsharpVoid(string strCC)

{

return strCC;

}

2.javascript 呼叫

<script>

document.write(s);

</script>

+++++++++++++++++第二種情況:

1.後代碼:

protected void CsharpVoid()

{

Response.Write(strCC);

}

2.呼叫方法:CsharpVoid()

<script>

document.write("<%CsharpVoid();%>");

</script>

你可在頁面中放一個按鈕,把它設定為不可見style="display:none",然後,用指令碼讓此按鈕點選

document.all("button1").click();

在此按鈕的C#後臺中寫事件程式碼,這就是最簡單的指令碼呼叫C#方法.

在網上看到這樣一個問題:作者用的平臺是.NET,用C#在本機開發,在aspx檔案中呼叫 js檔案:

<script language="javascript" src="mymenu.js"></script>

結果在頁面及 alert 提示的中文均為亂碼,求解決辦法。結果後面跟貼給出一長串的解決辦法,其實很簡單,在aspx 檔案的頭部新增一行程式碼即可:

<!--Page ContentType="text/html" ResponseEncoding="gb2312"-->

很簡單吧,呵呵。<!--page ContentType="text/html" ResponseEncoding="gb2312"--> <script language="javascript" type="text/javascript" src="TreeView.js"></script><script language="javascript" type="text/javascript" src="TreeView.js"></script>

--------------------------------------------------------------------------------------------------------------------------------------------------

在C#中呼叫VBScript、JavaScript等指令碼的實現

作者:秋楓

以前在做工作流(workflow)專案的時候,裡面有一項就是在使用者制定流程定義時可以編寫指令碼來控制活動的跳轉,而這些指令碼定義後存在資料庫中,當流程啟動的時候,工作流引擎會控制活動執行順序,串型的兩個活動比較簡單,但有的活動到下一個活動有條件判斷,或者存在多個分支,簡單的還好,只要在資料庫表中加個欄位就可以實現,複雜一點的就需要通過指令碼實現了。當時經驗不夠,幾天都沒找到快速的解決辦法,想自己寫一個自定義指令碼引擎沒有把握,而且時間也不夠,還是在網上找找看吧,花了一些時間,還是找到了一個自認為比較好的解決辦法,寫出來同大家分享。

下面通過兩部分來說明實現以及應用。

一.使用MSScriptControl

到微軟的網站上下載Windows Script Control,它是一個ActiveX(R) 控制元件,所以在.NET中使用我Interop了一下。下載安裝完成後,新建一個C#的Windows應用程式專案,在解決方案資源管理器中選中引用節點,右鍵點選選擇新增引用選單,彈出新增引用對話方塊,單擊瀏覽找到安裝Windows Script Control的目錄,選取msscript.ocx檔案確定。那麼在引用節點下會增加一個MSScriptControl元件,下面是他Interop後的所有物件。

ScriptControl 對支援 ActiveX(TM) Script 的宿主 Script 引擎提供簡單介面。接下來我們對被轉化成ScriptControlClass類的ScriptControl的屬性和方法進行一些說明。

屬性

AllowUI 屬性:應用於 ScriptControl 本身或 Scirpt 引擎顯示的使用者介面元素,可讀寫。

CodeObject 屬性:返回物件,該物件用於呼叫指定模組的公用成員。只讀。

Error 屬性:返回 Error 物件,其中包含所發生的最後一個錯誤的相關詳細資訊。只讀。

Language 屬性:設定或返回正在使用的 Script 語言名稱。可讀寫。

Modules 屬性:為 ScriptControl 物件返回模組集合。只讀。

Procedures 屬性:返回在指定模組中定義的過程集合。只讀。

SitehWnd 屬性:設定或返回視窗的 hWnd,通過執行 Script 程式碼,此視窗用於顯示對話方塊和其他使用者介面元素。可讀寫。

State 屬性:設定或返回 ScriptControl 物件的模式。可讀寫。

Timeout 屬性:設定或返回時間(毫秒),此時間後用戶可選擇中止 Script 程式碼的執行或允許程式碼繼續執行。可讀寫。

UseSafeSubset 屬性:設定或返回 Boolean 值,指明宿主應用程式是否有保密性要求。如果宿主應用程式需要安全控制,則 UseSafeSubset 為 True,否則為 False。可讀寫。

方法

AddCode 方法:向模組新增指定程式碼。可多次呼叫 AddCode 方法。

AddObject 方法:使主機物件模型對 Script 引擎可用。

Eval 方法:計算表示式並返回結果。

ExecuteStatement 方法:執行指定的語句。

Reset 方法:放棄所有已經新增到 ScriptControl 中的 Script 程式碼和物件。

Run 方法:執行指定過程。

事件

Error 事件:出現執行時錯誤時,發生此事件。

Timeout 事件:當超出了 Timeout 屬性指定的時間且使用者在結果對話方塊中選定了 End 時,發生此事件。

補充幾點

AllowUI 屬性如果設定為false,則顯示對話方塊之類的語句不起作用,如在 VBScript 中MsgBox 語句,JavaScript中的alert等,並且如果執行的指令碼超出TimeOut設定的毫秒數,也不會跳出超出時間提醒的對話方塊,反之則相反;重新設定 Language 屬性會清空AddCode載入的程式碼;對於TimeOut屬性,發生超時時,ScriptControl 檢查物件的 AllowUI 屬性,確定是否允許顯示使用者介面元素。

相關推薦

c#後臺呼叫前臺js方法調

很多人都向在伺服器端呼叫客戶端的函式來操作,也就是在asp中呼叫javascript指令碼中已經定義好的指令碼函式。經過研究,發現了一些勉強的方法。 1. 用Response.Write方法寫入指令碼 比如在你單擊按鈕後,先操作資料庫,完了後顯示已經完成,可以在最後想呼叫的地

C#後臺呼叫前臺JS函式方法

總結了公司其他人的一些C#後臺呼叫前臺的方法; 方法一: 假設前臺頁面的JS指令碼標籤中有如下函式: <script> function A() { alert("hello word!"); } </script>那麼在這個頁面的後臺程式碼可以這樣

父頁面子頁面的JS方法調

iframe     iframe元素也就是文件中的文件 window 物件     瀏覽器會在其開啟一個 HTML 文件時建立一個對應的 window 物件。但是,如果一個文件定義了一個或多個框架(即,包含一個或多個 frame 或 iframe 標籤),瀏覽器就會為

dynamic-load-apk 插件宿主方法調

-a rstp com 不一致 host width blog clas 技術分享 新建項目 DlPluginHost,下載dynamic-load-apk源碼 1.將dynamic-load-apk 文件夾中的lib做為module導入到DlPlginHost 2.

.NET後臺呼叫前臺Js引數方法

    鐺鐺鐺鐺,我又來啦。今天跟大家分享一下.NET網站中,前後臺數據互動的第二站,後臺對前臺JS的呼叫。     一.後臺獲取JS變數引數值     1.用隱藏域,後臺Request.Form[""]獲取     2.用ajax     3.js寫入cookie,後臺

ASP.NET後臺呼叫前臺JS函式的三種常見方法

第一種:使用普通的新增控制元件中的Attributes屬性進行呼叫 例如,像一般的普通的按鈕:Button1.Attributes.Add("onclick","MyFun();"); 此方法只能在Onload中或者類似於onload的初始化過程中新增才有效。並且是先執行指令碼函式,同時

WinForm程序執行JS代碼的多種方法以及使用WebBrowserJS

bce property subset func ble ica eth 多種方法 log 原文地址:http://www.cnblogs.com/feiyuhuo/p/5474790.html 方法一 使用微軟官方組件Interop.MSScriptControl

C# 後臺獲取前臺判斷

前臺 ati ole main bool read for div || 前臺傳來明細 ,判斷是否修改,在把前臺 的數據組成新的類保存 1 public class tt 2 { 3 public string id { get; set;

微信公眾號開發 自定義分享 從前臺到Java後臺 呼叫微信JS介面分享朋友圈

20180811寫在前面的話 有很多人遇到問題之後問我,結果大多數是因為配置問題,所以請詳細閱讀前面的配置步驟。 20181016注意事項 文中原始碼下載地址 上面這個地址是我當時做的整個專案的原始碼,包含了一些業務在裡面,用的是SSM框架,現在寫了一

C#.Net MVC 前臺頁面Js呼叫FileReader實現圖片預覽

開發過程中,總要用到上傳照片這一功能,在前臺可以Js呼叫FileReader實現圖片預覽,轉成base64存入資料庫 HTML部分: 引用Model @model Models.WorkerInfo 獲取 System.Web.Mvc.HtmlHelper 的Hidd

asp.net後臺呼叫前臺js

前臺js: <script type="text/javascript"> function alertClick() { mini.alert("資訊已提交!"); } </script> <input id=

c#兩種方式呼叫google地球,呼叫COM API以及呼叫GEPLUGIN js互動,載入kml檔案,dae檔案。將二維高德地圖覆蓋到到三維谷歌地球表面。

網路上資源很多不全面,自己在開發的時候走了不少彎路,在這裡整理了最全面的google全套開發,COM互動,web端互動。封裝好了各種模組功能。 直接就可以呼叫。 第一種方式:呼叫COMAPI實現呼叫google地球 1、安裝googleearth客戶端。傳送門:https://pan.baidu.com/

androidjs

call tex meta roi version window 裏的 使用 過程 首先引用一篇文章,看過這篇文章基本上就明白android大致與js是如何交互的了 Android與HTML+JS交互入門 ----------------------------分割線---

WebViewJs

hat bean length 暫時 cor pan ner port over 上周五,老大讓暫時搞一個評分app,倆頁面。第一個頁面顯示全部待評分的物業,第二個頁面是相應物業的評分頁面。評分頁面是表格樣式的,所以就讓web端的同學寫個html,我們

原生appjs jsSDK設計

app ipad handlers else android js交互 all ati lln var UA = window.navigator.userAgent.toLowerCase()var isIOS = UA && /iphone|ipad|i

Android:你要的WebView JS方式 都在這裏了

優點 callback 返回值 ima 三種 回調 輸入框 京東 col 前言 現在很多App裏都內置了Web網頁(Hybrid App),比如說很多電商平臺,淘寶、京東、聚劃算等等,如下圖 上述功能是由Android的WebView實現的,其中涉及到Android

java呼叫webservice介面方法

摘要: 本文講的是java呼叫webservice與介面方法, webservice的呼叫,常用的大約有3種方式:     1、使用axis呼叫     2、使用xfire呼叫     3

C# 後臺呼叫儲存過程

   protected void Page_Load(object sender, EventArgs e)         {             if (!Page.IsPostBack)             { #region 實參            

C# 後臺呼叫儲存過程,獲取DataTable

 public System.Data.DataTable GetDataBy_storedproc2()         {             #region _adapter             var _adapter = new System.Data.Sq

c#中 base64字串普通字串

https://blog.csdn.net/hwt0101/article/details/79758912 轉成 Base64 形式的 System.String:    string a = "base64字串與普通字串互轉";      by