フロントエンドJavascriptでC#メソッドを呼び出す方法(2)パラメータを渡す方法(ソースコード+上級者は入らない)
9757 ワード
前回の記事では、UrlがC#メソッドを呼び出すことができるように指定する機能を簡単に実現しましたが、パラメータ付きのメソッドはどのように呼び出すべきかという友人もいました.これはまさにこの文章が言いたい内容だ.
コメントの中には、文章の中で述べた内容が簡単すぎるという友人の返事がありますが、実はこれも相対的に、必要な人に役立つことを望んでいるだけです.タイトルが合っていない、多少合わないという友人もいますが、ある程度の関系があるので、このタイトルを书き続けさせていただきます.前編では反射によって要求された方法を得たが,実際にはこの方法に必要なパラメータを得るのは簡単なことである.私たちはMethodBaseを通じてGetParametersメソッドは、メソッドに必要なパラメータを取得します.必要なパラメータがわかっている以上,エージェントクラスFactoryにおけるExecuteメソッドを簡単に修正すれば,パラメータの伝達を実現できる.修正されたExecuteメソッドは次のとおりです.
NewsクラスにPlusメソッドを追加してテストします.
htmlのJavascriptコードを見てみましょう.
HtmlページのFORM:
なぜformを使うのか、実は怠け者で、何文字も叩くのがおっくうで、jqueryのserializeでフォームデータを取得して提出します.実際にコミットされたデータは{x:1,y:2}に似ています.コミットされたデータを手動で取得するには、より直感的になるかもしれませんが、コードを多く叩く必要があります.
等しいボタンをクリックすると、ページスクリプトは2つの入力ボックスの値をサービス側に送信し、サービス側が処理した後に値応答を出力します.もちろん、例のタスクは簡単すぎるかもしれませんが、必要な友达には役に立つはずです.
文章を発表する目的は、一つは少しの経験を分かち合うことであり、もう一つはみんなと一緒に交流してお互いに勉強することを望んでいる.
本編のソースコードのダウンロードを添付します:
ダウンロード
後続には他にもいくつかの内容が入っていますので、興味のある方は注意してください.
未完待続...
コメントの中には、文章の中で述べた内容が簡単すぎるという友人の返事がありますが、実はこれも相対的に、必要な人に役立つことを望んでいるだけです.タイトルが合っていない、多少合わないという友人もいますが、ある程度の関系があるので、このタイトルを书き続けさせていただきます.前編では反射によって要求された方法を得たが,実際にはこの方法に必要なパラメータを得るのは簡単なことである.私たちは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");
});
});
等しいボタンをクリックすると、ページスクリプトは2つの入力ボックスの値をサービス側に送信し、サービス側が処理した後に値応答を出力します.もちろん、例のタスクは簡単すぎるかもしれませんが、必要な友达には役に立つはずです.
文章を発表する目的は、一つは少しの経験を分かち合うことであり、もう一つはみんなと一緒に交流してお互いに勉強することを望んでいる.
本編のソースコードのダウンロードを添付します:
ダウンロード
後続には他にもいくつかの内容が入っていますので、興味のある方は注意してください.
未完待続...