从[WebMethod]调用JavaScript函数
我需要调用一个显示引导模式的JavaScript函数。我有以下代码:从[WebMethod]调用JavaScript函数,javascript,c#,twitter-bootstrap,Javascript,C#,Twitter Bootstrap,我需要调用一个显示引导模式的JavaScript函数。我有以下代码: [System.Web.Services.WebMethod()] [System.Web.Script.Services.ScriptMethod()] public static void execModal(string groupname, int zw) { //need to generate the data first StringBuilder sb = new StringBuilder(
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static void execModal(string groupname, int zw) {
//need to generate the data first
StringBuilder sb = new StringBuilder();
Generate gen = new Generate();
sb = gen.generateDeeperTable(zw, groupname);
//insert into my placeholder
//Append the HTML string to Placeholder.
fillPH(sb);
//run javascript function <showModel> to show the modal
}
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
公共静态void exemodal(字符串groupname,int zw){
//首先需要生成数据
StringBuilder sb=新的StringBuilder();
Generate gen=new Generate();
sb=gen.generatedepertable(zw,groupname);
//插入到我的占位符中
//将HTML字符串附加到占位符。
菲尔夫(某人);
//运行javascript函数以显示模式
}
下面是我如何调用execModal方法form JS:
<script type="text/javascript>
function callGenDeeperTable(zw, groupname) {
PageMethods.execModal(groupname, zw);
}
</script>
您的exemodal
方法位于服务器上。您尚未指定从何处调用(调用)它,但由于您已将其修饰(向定义它的方法添加属性…)为WebMethod
,很可能您正试图从客户端浏览器中运行的(HTML)页面调用它。要进行此调用,需要在希望运行该方法的客户端和保存该方法的服务器之间建立一条通信线路。您还将注意到exemodal
被定义为静态方法。这意味着当调用它时,它将没有页面
类的实例成员,包括fillPH
(除非fillPH
是静态的
)。我不知道您是否正在使用ASP.NET WebForms(尝试从.aspx
页面进行调用),或者这是某个应用程序使用的服务(方法位于.asmx
中),或者我猜这甚至可能是ASP.NET MVC
假设ASP.NET WebForms
让我们来处理最简单的案例,因为几乎没有提供任何细节。如果我们假设此方法,execModal
存在于.aspx.cs
文件中,并且您正试图从相应的.aspx
页面调用它,并且这是ASP.NET WebForms应用程序的一部分
您需要启动对exemodal
的调用。这需要从客户端调用服务器。您可以创建自己的AJAX框架,但是有很多。下面我将给出一个使用jQuery的示例
您需要静态地在服务器上执行工作,或者需要使用HttpCurrent.Context
来获取页面
、会话
等的实例。可以通过
一旦该方法在服务器上完成,结果(成功或失败)以及您想要返回到客户机的任何数据(可选)将被发送回客户机的浏览器。应用程序的客户端部分应该能够使用事件处理程序处理此响应。事件处理程序应与XMLHttpRequest
对象的onreadystatechange
事件关联,并在状态更改为4(完成)时处理响应。像jQuery这样的框架通过在AJAX调用中提供参数来指定成功/失败回调来解决这一开销。不要将此通信过程的结果(成功/失败)与应用程序过程的结果(执行模式的实际工作)混淆
然后,客户端(成功)回调函数将只调用所需的js函数showmodel
您的客户端AJAX调用(如果您使用jQuery)将如下所示
$.ajax({
type: "POST",
url: "Default.aspx/execModal",
data: '{groupname: "' + groupname + '", zw: ' + zw + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response) {
showModal();
},
failure: function(response) {
alert("AJAX request failed");
}
});
这是一个非常基本的例子。您可能希望服务器决定成功后会发生什么,但返回一个JSON数据,或者返回一个带有可在客户端执行的js函数名称的字符串-这些只是一些示例,让您思考可能发生什么
编辑-说明OP在问题中添加了PageMethods.exemodal()
你说你是从这里调用你的服务器代码
<script type="text/javascript>
function callGenDeeperTable(zw, groupname) {
PageMethods.execModal(groupname, zw);
}
在您的例子中,有两个参数被传递到WebMethod
,因此在这两个参数之后,您希望提供成功和失败的回调函数showModal
可能是您的成功处理程序
PageMethods.execModal(groupname, zw, showModal, function() { alert('failed!') });
您的exemodal
方法位于服务器上。您尚未指定从何处调用(调用)它,但由于您已将其修饰(向定义它的方法添加属性…)为WebMethod
,很可能您正试图从客户端浏览器中运行的(HTML)页面调用它。要进行此调用,需要在希望运行该方法的客户端和保存该方法的服务器之间建立一条通信线路。您还将注意到exemodal
被定义为静态方法。这意味着当调用它时,它将没有页面
类的实例成员,包括fillPH
(除非fillPH
是静态的
)。我不知道您是否正在使用ASP.NET WebForms(尝试从.aspx
页面进行调用),或者这是某个应用程序使用的服务(方法位于.asmx
中),或者我猜这甚至可能是ASP.NET MVC
假设ASP.NET WebForms
让我们来处理最简单的案例,因为几乎没有提供任何细节。如果我们假设此方法,execModal
存在于.aspx.cs
文件中,并且您正试图从相应的.aspx
页面调用它,并且这是ASP.NET WebForms应用程序的一部分
您需要启动对exemodal
的调用。这需要从客户端调用服务器。您可以创建自己的AJAX框架,但是有很多。下面我将给出一个使用jQuery的示例
您需要静态地在服务器上执行工作,或者需要使用HttpCurrent.Context
来获取页面
、会话
等的实例。页面
可以
PageMethods.execModal(groupname, zw, showModal, function() { alert('failed!') });
function buyproduct(productId)
{
PageMethods.checkifvalid(productid, OnSuccess);
}
function OnSuccess(response, userContext, methodName)
{
this[response]();
}
function functionToCallAfterwebmethod()
{
alert("Javascript Function called successfully!!");
}
[System.Web.Services.WebMethod]
public static string checkifvalid(int productId)
{
--your any logic to check
-- pass the javascript function as return parameter
return "functionToCallAfterwebmethod"
}