Ajax 方法调用

Posted

技术标签:

【中文标题】Ajax 方法调用【英文标题】:Ajax method call 【发布时间】:2011-05-29 08:21:34 【问题描述】:

我试图在我的代码中使用 Jquery 和 Ajax 调用一个简单的方法。但我每次都得到一个 404 not found 异常。不幸的是,这是一个网络表单解决方案。所以我没有 MVC 的所有好处:(

它确实进入了 javascript 方法并发出警报,但不会进入我的 c# 方法。我以前使用这种 Jquery 方法的经验是在 MVC 网站中。它与网络表单网站兼容吗?

我的 Javascript 是:

$(document).ready(function() 

              $('#btn_<%=UserStuff.tag %>').click(function()                     

                  var value = $('#<%#Eval("tag") %>twink').val();
                  something(value);                    
              );
          );


          function something(theval) 

            alert(theval);

              $.ajax(
                  type: "POST",
                  url: "/Default.aspx/MyMethod?something=" + theval,
                  data: "",
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  success: function(msg) 
                      alert(msg);
                  
              );
          

而我的 C# 代码是:

   public JsonResult MyMethod(string something)

    JsonResult ret = new JsonResult();      

    return ret;

提前致谢。

【问题讨论】:

【参考方案1】:

您的方法返回JsonResult。这是 MVC 特定的,您不能在 webforms 应用程序中使用它。

如果您想在经典 WebForms 应用程序的代码中调用方法,您可以使用PageMethods:

[WebMethod]
public static string GetDate()

    return DateTime.Now.ToString();

然后调用方法:

$.ajax(
    type: 'POST',
    url: 'PageName.aspx/GetDate',
    data: ' ',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function(msg) 
        // Do something interesting here.
    
);

这是我为你写的一个完整的工作示例:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Services" %>
<script type="text/C#" runat="server">
    [WebMethod]
    public static string SayHello(string name)
    
        return "Hello " + name;
    
</script>
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="/scripts/jquery-1.4.1.js"></script>
    <script type="text/javascript">
        $(function () 
            $.ajax(
                type: 'POST',
                url: 'default.aspx/sayhello',
                data: JSON.stringify( name: 'John' ),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (msg) 
                    // Notice that msg.d is used to retrieve the result object
                    alert(msg.d);
                
            );
        );
    </script>
</head>
<body>
    <form id="Form1" runat="server">

    </form>
</body>
</html>

PageMethods 不限于简单的参数类型。您可以使用任何类型作为输入和输出,它会自动进行 JSON 序列化。

【讨论】:

耶啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!非常非常棒!有用!谢谢!!!!!!!!祝达林圣诞快乐! @LooDaFunk,也祝你圣诞快乐! @DarinDimitrov 我有一个问题,当我尝试调用 .asmx webservice 文件中的 webmethod 时,我必须在 .cs 文件中取消注释 [System.Web.Script.Services.ScriptService] ,以您使用 json 的方式调用网络方法,如我所见我应该在 [WebMethod] 上方添加 [System.Web.Script.Services.ScriptService] 吗?提前谢谢 @DarinDimitrov 谢谢,太好了,我正在尝试使用 sayhello 方法联系外部类,这可能吗? ***.com/questions/32007945/ajax-method-external-class @DarinDimitrov 我以 cshtml 格式查看页面,那么我该如何解决这个问题***.com/questions/33382634/…

以上是关于Ajax 方法调用的主要内容,如果未能解决你的问题,请参考以下文章

ajax调用后台C#方法

如何在AJAX中调用.CS中的类

Ajax 方法调用

jquery ajax php 调用方法!

ajax调用java后台的一个方法

Asp.net中ajax调用后台方法