AJAX:如何从AJAX方法后面的C#代码调用JavaScript函数

问题描述:

我需要从ajax方法背后的c#代码调用javascript函数(CommentButtonShow())。我无法做到这一点。AJAX:如何从AJAX方法后面的C#代码调用JavaScript函数

以下是C#的AJAX方法,

[AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public string CheckPassword() 
{ 
    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ScriptManager1", "javascript:CommentButtonShow();", true); 
} 

下面是JavaScript函数,

function CommentButtonShow() { 
     $("#ctl00_mainContentPlaceHolder_divEmailFriends").removeClass('hidden').addClass('show'); 
    } 

请帮助我。

谢谢。

+2

问题是什么? – 2012-04-17 08:22:22

+0

我需要从ajax方法背后的c#代码调用javascript函数(CommentButtonShow())。我无法做到这一点。 CommentButtonShow方法没有被触发 – user735647 2012-04-17 08:25:05

+0

你看过你的javascript调试工具控制台吗?你看看是否正在发送AJAX请求(在你的javascript调试工具中)?请求的样子是怎样的?服务器响应什么? – 2012-04-17 08:25:41

你可以在javascript里面调用CommentButtonShow()函数在ajax调用成功事件中。你不能在web方法中调用javascript函数。如果它是回发你的代码将工作,但对于Ajax回调它不会工作。

+0

谢谢chamika。有没有其他方法可以从Ajax方法后面的代码调用JS方法? – user735647 2012-04-17 08:33:36

+0

如果您使用ajax调用它,那么在web方法中调用javascript函数的目的是什么 – 2012-04-17 09:01:21

我回答这个问题,以做一些有趣的工作给他们:)时流下更多的光线对于那些谁是新的这个cilent端和服务器端脚本和混合起来

这是绝对不可能的调用C#(服务器端)代码中的Javascript(客户端)功能。我的意思是,即使你真的不能在地球上的任何编程语言中调用javascript回到服务器端代码!

这很简单。服务器端代码呈现客户端代码。由于客户端代码(html/javascript)驻留在浏览器中,因此您至少不需要在服务器端获取任何钩子,然后调用它。但是,对于Asp.Net为您提供了一个钩子,它实际上将客户端HTML控件(大多数HTML标记)转换为服务器端控件(如.net框架支持的),然后您可以访问它们的属性和一些只在服务器上调用的方法-侧。这并不意味着你有JavaScript事件或类似的事情。无论你用服务器端控件HAPPEN做什么,只需要在服务器端完成,并且在THAT控件的最终代码发送给浏览器进行呈现之前,所有这些控件都已经完成。这就是为什么当这样的控件的html呈现时,你会看到一个典型的基于.net的ID生成,看起来像_ctr01等。

无论如何,使用Ajax(在客户端),仍然可以使用Ajax.Net和/或Ajaxpro(ajaxpro.info)或自定义javascript lib(jquery)调用服务器端方法。

我希望这只会帮助理解你在做什么实际上是不可能的。我仍然不会评价你的问题,因为它真的会帮助许多新来的人了解事情是如何运作的,以及经历过这些事情的人是如何做到的。

我希望它非常公平地使用这个论坛来提供帮助每个人而不是让他们知道他们要问/回答问题的信息,而不是让他们知道他们问/答是对/错。

非常感谢。

我们可以从JQuery AJAX调用中调用codebehind方法,并根据状态判断是错误还是成功执行相应的方法。

function MyMethod() { 
    $.ajax({ 
    type: "POST", 
    url: "CodeBehind.aspx/ClearData", 
    contentType: "application/json;charset=utf-8", 
    data: '', 
    dataType: "json", 
    success: function (data, textStatus) { 
     closePopUpwindow1(); 
    }, 
    error: function (data, textStatus) { 
     closePopUpwindow2(); 
    } 
});} 

    [WebMethod] 
    public static void ClearData(){ 
Page.SetGridSessionData(gridID, null); 
} 

如果服务器端方法成功执行,则执行closePopUpwindow1方法,否则将执行closePopUpwindow2方法。