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

AJAX:如何从AJAX方法背后的C#代码调用javascript函数,javascript,asp.net,ajax,scriptmanager,Javascript,Asp.net,Ajax,Scriptmanager,我需要从ajax方法背后的c代码调用javascript函数(CommentButtonShow())。我无法做到这一点 下面是C#ajax方法 [AjaxMethod(HttpSessionStateRequirement.ReadWrite)] public string CheckPassword() { ScriptManager.RegisterClientScriptBlock(this, GetType(), "ScriptManager1", "javascript:Comm

我需要从ajax方法背后的c代码调用javascript函数(CommentButtonShow())。我无法做到这一点

下面是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'); 
    }
请帮帮我


谢谢。

您可以在ajax调用成功事件中调用javascript中的
CommentButtonShow()
函数。不能在web方法内调用javascript函数。如果是回发,您的代码将正常工作,但对于ajax回发,则无法正常工作。

您可以在ajax调用成功事件中调用javascript中的
CommentButtonShow()
函数。不能在web方法内调用javascript函数。如果是回发,您的代码将正常工作,但对于ajax回发,则无法正常工作。

我回答此问题是为了让那些不熟悉此客户端和服务器端脚本的人了解更多信息,并且在对他们做一些有趣的工作时会混淆:)

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

这很简单。服务器端代码呈现客户端代码。由于客户端代码(html/javascript)驻留在浏览器中,所以您没有任何javascripts的挂钩,至少在服务器端获取它,然后调用它。但是对于Asp.Net,它为您提供了一个钩子,可以将客户端HTML控件(大多数HTML标记)转换为服务器端控件(如.Net framework所支持的),然后您可以访问它们的属性和一些只在服务器端调用的方法。这并不意味着您有javascript事件或诸如此类的事件。无论您对这些服务器端控件执行什么操作,都只在服务器端发生,并且在将该控件的最终代码发送到浏览器进行渲染之前,所有操作都已完成。这就是为什么当呈现这些控件的html时,您会看到一个典型的基于.net的ID生成,看起来像_ctr01之类的

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

我希望这有助于理解你正在做的事情实际上是不可能的。我仍然不认为你的问题是负面的,因为它确实会帮助许多新来者了解事情是如何运作的,以及经历过这种情况的人是如何做到正确的

我希望它能非常合理地利用这个论坛提供信息,帮助每个人,而不是否定他们的观点,而不让他们知道他们所问/回答的是对/错


非常感谢。

我回答这个问题的目的是为那些不熟悉此客户端和服务器端脚本的人提供更多信息,并在对他们做一些有趣的工作时将其混淆:)

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

这很简单。服务器端代码呈现客户端代码。由于客户端代码(html/javascript)驻留在浏览器中,所以您没有任何javascripts的挂钩,至少在服务器端获取它,然后调用它。但是对于Asp.Net,它为您提供了一个钩子,可以将客户端HTML控件(大多数HTML标记)转换为服务器端控件(如.Net framework所支持的),然后您可以访问它们的属性和一些只在服务器端调用的方法。这并不意味着您有javascript事件或诸如此类的事件。无论您对这些服务器端控件执行什么操作,都只在服务器端发生,并且在将该控件的最终代码发送到浏览器进行渲染之前,所有操作都已完成。这就是为什么当呈现这些控件的html时,您会看到一个典型的基于.net的ID生成,看起来像_ctr01之类的

无论如何,使用Ajax(在客户端),您仍然可以使用Ajax.Net和/或Ajaxpro(Ajaxpro.info)或自定义javascript库(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方法。

我们可以从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);
}

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

我需要从ajax方法背后的c代码调用javascript函数(CommentButtonShow())。我无法做到这一点。CommentButtonShow方法没有被触发。您在javascript调试工具控制台中查看了吗?您是否查看了AJAX请求是否正在发送(在javascript调试工具中)?请求看起来怎么样?服务器响应什么?我不确定javascript调试工具控制台。如果我错了,请纠正我。我在javascript函数中添加了一个警报,但是这些函数根本不会被触发。哦,不,警报不是javascript调试工具。那是15年前。今天,FireBug就是一个例子。Chrome开发者工具是另一个
   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);
}