我看到了这个问题的几个解决方案。但是,当我尝试自己时,效果不佳。
我尝试将C#代码修改为此
[WebMethod]
protected void Show(object sender, EventArgs e)
{
//C# function
}
但我的asp.net没有WebMethod的东西。我需要包含一些库吗?
在JS,我做得对吗?发件人和e为何错误?
<script>
$(document).ready(function () {
var image = $("#VImage").html()
$("#myModal").on("shown.bs.modal", function () {
PageMethods.Show(object sender, EventArgs e);
});
});
</script>
答案 0 :(得分:0)
您调用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序列化/反序列化的参数对象。