【问题标题】:Ajax method callAjax 方法调用
【发布时间】: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;
}

提前致谢。

【问题讨论】:

    标签: c# asp.net jquery ajax


    【解决方案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 方法联系外部类,这可能吗? stackoverflow.com/questions/32007945/ajax-method-external-class
    • @DarinDimitrov 我以 cshtml 格式查看页面,那么我该如何解决这个问题stackoverflow.com/questions/33382634/…
    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多