怎樣在前端Javascript中調(diào)用C#方法(2)傳遞參數(shù)(附源碼+高手勿入)
上一篇文章中我們簡單的實現(xiàn)了指定Url可以調(diào)用某個C#方法的功能,但有的朋友提到了,如果帶參數(shù)的方法該怎么調(diào)用呢?這正是這篇文章要說到的內(nèi)容。
評論中有朋友回復(fù)說文章中講到的內(nèi)容過于簡單基礎(chǔ),其實這個也只是相對而言,分享出來也只是希望能夠?qū)π枰娜擞兴鶐椭R灿信笥颜f標(biāo)題有些不符,多少是有些不符,但也還是有一定的關(guān)聯(lián),所以就讓我將就這個標(biāo)題寫下去吧,如有不妥還望眾高手見諒了。
上篇中我們已經(jīng)通過反射獲得了請求的方法,實際上這時候我們要拿到該方法所需要的參數(shù)已經(jīng)是一件很簡單的事情了。我們可以通過MethodBase.GetParameters方法獲取到該方法所需要的參數(shù)。
既然已經(jīng)知道了所需的參數(shù),那我們簡單的修改一下代理類Factory中的Execute方法,即可實現(xiàn)參數(shù)的傳遞了。
修改后的Execute方法如下:
void Execute(HttpContext context) {
//根據(jù)請求的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) {
//取得類的無參數(shù)構(gòu)造函數(shù)
var constructor = type.GetConstructor(new Type[0]);
//調(diào)用構(gòu)造函數(shù)取得類的實例
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);
}
}
//執(zhí)行方法并輸出響應(yīng)結(jié)果
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()生成的數(shù)據(jù)類似于{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獲取表單數(shù)據(jù)并提交。實際提交的數(shù)據(jù)類似于{x:1,y:2},要想手動獲取提交的數(shù)據(jù)也可以,這樣可能更直觀些,但就是要多敲點代碼:
$(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");
});
});
點擊等于按鈕后,頁面腳本會將兩個輸入框的值發(fā)送到服務(wù)端,服務(wù)端處理后將值響應(yīng)輸出。當(dāng)然,示例的任務(wù)可能過于簡單,但對于有需要的朋友,應(yīng)該能找到它的用處。
發(fā)布文章的目的,一個是分享一點點經(jīng)驗,另一個是希望能跟大家一起交流互相學(xué)習(xí),如果文中有表達(dá)不到位的,或者不妥之處,還望大家見諒。

浙公網(wǎng)安備 33010602011771號