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

时间:2012-04-17 07:59:48

标签: javascript asp.net ajax scriptmanager

我需要从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'); 
    }

请帮帮我。

感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我正在回答这个问题,为那些不熟悉这个静默端和服务器端脚本的人提供更多的亮点,并在为他们做一些有趣的工作时混淆:)

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

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

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

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

我希望它能够非常合理地利用这个论坛提供的信息可以帮助每个人而不是让他们知道他们的要求/回答是对是错。

非常感谢。

答案 2 :(得分:0)

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

   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方法。