Ajax方法调用

16

我想使用Jquery和Ajax调用我的代码后端中的一个简单方法。但每次都会出现404 not found例外。不幸的是,这是一个Web Forms解决方案。所以我没有所有MVC的好处:(

它确实进入了javascript方法并给出了警报,但不会进入我的C#方法。我之前使用这种Jquery方法的经验是在一个MVC网站上。它是否与Web Forms站点兼容?

我的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个回答

39

您的方法返回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序列化。


1
太棒了!!!!!!非常非常好!它可以工作了!谢谢!!!!!!达林,圣诞快乐! - Funky
1
@LooDaFunk,祝你也有一个快乐的圣诞节! - Darin Dimitrov
@DarinDimitrov 我有一个问题,当我尝试调用位于 .asmx web 服务文件中的 webmethod 时,我必须在 .cs 文件中取消注释 [System.Web.Script.Services.ScriptService],就像您使用 json 调用 webmethod 一样。那么我是否应该在 [WebMethod] 上方添加 [System.Web.Script.Services.ScriptService]?提前致谢。 - gwt
@DarinDimitrov 谢谢,这很棒。我正在尝试使用 sayhello 方法联系外部类,这可能吗?http://stackoverflow.com/questions/32007945/ajax-method-external-class - Scott
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - kez
我想要像这样的东西托管在IIS上(WebMethod),这样我就可以从浏览器中调用它。有什么想法吗? - Si8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接