程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 怎樣在前端Javascript中調用C#方法(2)傳遞參數(附源碼+高手勿入)

怎樣在前端Javascript中調用C#方法(2)傳遞參數(附源碼+高手勿入)

編輯:C#入門知識

上一篇文章中http://www.BkJia.com/kf/201203/122288.html 我們簡單的實現了指定Url可以調用某個C#方法的功能,但有的朋友提到了,如果帶參數的方法該怎麼調用呢?這正是這篇文章要說到的內容。
  評論中有朋友回復說文章中講到的內容過於簡單基礎,其實這個也只是相對而言,分享出來也只是希望能夠對需要的人有所幫助。也有朋友說標題有些不符,多少是有些不符,但也還是有一定的關聯,所以就讓我將就這個標題寫下去吧,如有不妥還望眾高手見諒了。
  上篇中我們已經通過反射獲得了請求的方法,實際上這時候我們要拿到該方法所需要的參數已經是一件很簡單的事情了。我們可以通過MethodBase.GetParameters方法獲取到該方法所需要的參數。
  既然已經知道了所需的參數,那我們簡單的修改一下代理類Factory中的Execute方法,即可實現參數的傳遞了。
  修改後的Execute方法如下:
void Execute(HttpContext context) {
    //根據請求的Url,通過反射取得處理該請求的類
    string url = context.Request.Url.AbsolutePath;
    string[] array = url.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
    string typename = "Biz";
    for (int x = 1; x < array.Length - 1; x++) {
        typename += "." + array[x];
    }
    Type type = this.GetType().Assembly.GetType(typename, false, true);
    if (type != null) {
        //取得類的無參數構造函數
        var constructor = type.GetConstructor(new Type[0]);
        //調用構造函數取得類的實例
        var obj = constructor.Invoke(null);
        //查找請求的方法
        var method = type.GetMethod(System.IO.Path.GetFileNameWithoutExtension(url));
        if (method != null) {
            var parameters = method.GetParameters();
            object[] args = null;
            if (parameters.Length > 0) {
                args = new object[parameters.Length];
                for (int x = 0; x < parameters.Length; x++) {
                    args[x] = Convert.ChangeType(context.Request.Form[parameters[x].Name], parameters[x].ParameterType);
                }
            }
            //執行方法並輸出響應結果
            context.Response.Write(method.Invoke(obj, args));
        }
    }
}

 
News類中加入一個Plus方法做測試:
 
public int Plus(int x, int y) {
    return x + y;
}

 
再來看看html中的Javascript代碼:
 
$(function () {
    //綁定按鈕點擊事件
    $("#btnAction").click(function () {
        $.post("/Ajax/News/Plus.aspx", $("form").serialize(), function (txt) {
            $("#result").val(txt);
        }, "text");
    });
    //$("form").serialize()生成的數據類似於{x:1,y:2}
});

 
Html頁面中的FORM:
 
<form  action="">
    <input type="text" name="x" value="1" class="txt" />
    <input type="button" disabled="disabled" value="+" class="txt btn" />
    <input type="text" name="y" value="2" class="txt" />
    <input id="btnAction" type="button" value="=" class="txt btn" />
    <input type="text" readonly="readonly" id="result" class="txt" />
</form>

 
為什麼要用form,其實也就是懶,懶得敲多幾個字母,直接用jquery中的serialize獲取表單數據並提交。實際提交的數據類似於{x:1,y:2},要想手動獲取提交的數據也可以,這樣可能更直觀些,但就是要多敲點代碼:
$(function () {
    $("#btnAction").click(function () {
        $.post("/Ajax/News/Plus.aspx", {x:$("input[name='x']").val(),y:$("input[name='y']").val()}, function (txt) {
            $("#result").val(txt);
        }, "text");
    });
});

 
點擊等於按鈕後,頁面腳本會將兩個輸入框的值發送到服務端,服務端處理後將值響應輸出。當然,示例的任務可能過於簡單,但對於有需要的朋友,應該能找到它的用處。
 
發布文章的目的,一個是分享一點點經驗,另一個是希望能跟大家一起交流互相學習,如果文中有表達不到位的,或者不妥之處,還望大家見諒。
 
 
附本篇源碼下載:點擊下載http://www.BkJia.com/uploadfile/2012/0308/20120308083716582.zip

 
後續還會有一些其它的內容加入到後面文章中,請有興趣的同學不妨留意一下。
 
未完待續...

 

摘自  狼Robot 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved