如何从Javascript调用c#函数
本文关键字:函数 调用 Javascript | 更新日期: 2023-09-27 18:16:53
对于这个问题,我看到了几个解决方案。然而,当我自己尝试时,效果并不好。
我试图修改我的c#代码到这个
[WebMethod]
protected void Show(object sender, EventArgs e)
{
//C# function
}
但是没有WebMethod的东西为我的asp.net。我需要包括一些库吗?
在JS我做得对吗?为什么发送者和e是错误的?
<script>
$(document).ready(function () {
var image = $("#VImage").html()
$("#myModal").on("shown.bs.modal", function () {
PageMethods.Show(object sender, EventArgs e);
});
});
</script>
你不应该像这样从任何地方调用函数,你调用函数的方式和声明函数的方式是一样的。
PageMethods.Show(object sender, EventArgs e);
应:var sender, e;
PageMethods.Show(sender, e);
调用c#方法的方式与尝试进行任何其他AJAX调用没有什么不同。您只需要确保c#方法被正确地公开。要做到这一点,你需要。
- 用
[WebMethod]
注释 - 还认为在这种情况下需要
public
和static
在客户端,由于使用的是JQuery,所以调用它的方式与AJAX调用
相同 $.ajax({
type: "POST",
url: "Default.aspx/Show",
data: "{ sender: {}, e: {} }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
console.log(msg);
},
error: function (msg) {
console.log(msg);
}
});
这样想,你需要发出一个HTTP请求,其中包含web服务器调用c#方法所需知道的所有信息。这意味着需要知道方法名和方法所需的参数。
在后台,当你发出HTTP请求时,框架正在从HTTP POST中获取主体,并试图反序列化JSON对象,以获得调用c#方法所需的方法名称和参数。
在您的示例中,c#方法具有签名Show(object sender, EventArgs e)
,这意味着服务器正在期待来自客户端的两个对象,其中一个它知道足够的反序列化为EventArgs
对象,因此它可以调用Show
方法。
我建议将参数更改为基本类型('string', 'int'等),如果可能的话,或者创建您自己的参数对象,您已经验证可以由。net序列化/反序列化。