C# Web 方法不在 javascript 中调用

IT技术 javascript c# jquery json asp.net-mvc
2021-02-09 10:29:31

在此处输入图片说明我创建了一个 web 方法,现在我在我的 java 脚本文件中调用它,但是它给出了一个路径错误,它无法找到我给出的路径..

Web方法代码是:

    [System.Web.Services.WebMethod]
    public static int ItemCount(string itemId)
    {
        int val = 0;

            Item itm = Sitecore.Context.Database.GetItem(itemId);
            val = itm.Children.Count;

        return val;
    }

java脚本函数调用如下:

    function GetItemCount(itemId) {
    var funRes = "";
    debugger;
    try {
    if (itemId != null) {
        jQuery.ajax({
            cache: false,
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Views/GetItem.aspx/ItemCount",
            data: { itemId: itemId },
            dataType: "json",
            async: false,
            success: function (data) {
                funRes = data.result;
            },
            error: function(err) {
                alert(err.responseText);
            }
        });
    }
  } catch (ex) {
    alert(ex.message);
  }
  return funRes;}

虽然我给出了 C# 方法类的确切路径,但它不起作用在控制台上给出错误,谁能告诉我我在这里缺少什么..

3个回答

ajax 与 asp.net 一起工作的规则很少。

  • 您的 WebMethod 应该是publicstatic
  • 如果您的 WebMethod 需要一些参数,那么这些参数必须像data在 ajax 中一样传递
  • 参数的名称应该sameajaxWebMethod并且data是 ajax 的一部分。
  • 从 ajax 传递的数据应该在json string. 为此,您可以使用,JSON.stringify否则您必须将valuesof 参数括起来quotes

请检查下面的示例ajax调用

function CallAjax()
    {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "Default.aspx/CallAjax",
            data: JSON.stringify({ name: "Mairaj", value: "12" }),
            dataType: "json",
            async: false,
            success: function (data) {
                //your code

            },
            error: function (err) {
                alert(err.responseText);
            }

        });
    }



[WebMethod]
public static List<string> CallAjax(string name,int value)
{
    List<string> list = new List<string>();
    try
    {
        list.Add("Mairaj");
        list.Add("Ahmad");
        list.Add("Minhas");
    }

    catch (Exception ex)
    {

    }

    return list;
}

编辑

如果您GET在 ajax 中使用,则需要启用从GET请求中调用您的 webmethod 添加[System.Web.Script.Services.ScriptMethod(UseHttpGet = true)]在 WebMetod 之上

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true)]
public static int ItemCount()
我的网页在一个文件夹中,然后我是否需要在 URL 中添加它的名称
2021-03-17 10:29:31
不,它正在查找页面,但您需要将 WebMethod 设为静态。
2021-03-28 10:29:31
当我将方法更改为静态时,我遇到了同样的错误
2021-03-30 10:29:31
当我在演示项目中工作并在 javascript 中调用示例 C# 方法时,它调用正常,但在同一页面上有 c# 方法
2021-03-30 10:29:31

只需修改javascript函数如下

  function GetItemCount(itemId) {
    var funRes = "";
   debugger;
   try {
    if (itemId != null) {
        jQuery.ajax({
            type: "GET",
            url: "/Views/GetItem.aspx",
            data: 'itemID=' + itemId,
            contentType: "application/html",
            dataType: "html",
            success: function (response) {
                funRes= response.result;
            }
        });
     }
  } catch (ex) {
    alert(ex.message);
  }
  return funRes;
}

我不确定它是否是 Web 方法不会触发的每个问题主题的解决方案。但是我今天发现字符串中有 ' char 时。Web 方法未触发。